我有一个包含XML数据的S3文件,我需要将其插入Aurora PostgreSQL数据库(PostgreSQL 11.9(中的表中。为此,我正在尝试使用AWS lambda。在lambda函数中,我从S3对象读取数据,并使用pg8000尝试将记录插入表中。插入sql因而失败
[ERROR] ProgrammingError: {'S': 'ERROR', 'V': 'ERROR', 'C': '42P18', 'M': 'could not determine data type of parameter $1', 'F': 'postgres.c', 'L': '1432', 'R': 'exec_parse_message'}
示例-
S3文件中的XML
<?xml version="1.0" encoding="UTF-8"?>
<hotels>
<hotel id="Taj">
<name>Taj Campton Place</name>
<location>San Francisco</location>
<rating>4.5</rating>
<rooms>
<room id="100">
<capacity>3</capacity>
<comment>Phenomenal service</comment>
</room>
</rooms>
<personnel>
<person id="3030">
<name>Pie Co</name>
<salary currency="USD">80000</salary>
</person>
</personnel>
</hotel>
</hotels>
从lambda 中的S3文件读取数据的代码
content_object = s3.Object(bucket, key)
file_content = content_object.get()["Body"].read().decode("utf-8")
#parsed_xml = ET.fromstring(file_content)
print(file_content)
插入数据的代码
conn = pg8000.connect(
database='lab',
user='master',
password='xxxxx',
host='lab.cluster.us-east-1.rds.amazonaws.com',
port=8192,
)
cursor = conn.cursor()
cursor.execute(
"INSERT INTO lambda_xml_test (data) values ('%s')", (file_content,)
)
我也试过
INSERT INTO lambda_xml_test (data) values ('%%')", (file_content,)
INSERT INTO lambda_xml_test (data) values (%s)", (file_content,)
关于如何将XML数据插入PG中的表,有什么建议吗?
问题是PostgreSQL服务器不知道您发送的数据类型是xml
。有关详细信息,请参阅文档。解决方案是在SQL中放入一个CAST
来告诉服务器类型。例如:
cursor.execute(
"INSERT INTO lambda_xml_test (data) values (CAST(%s as xml))",
(file_content,)
)