首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pg8000将xml数据插入到PostgreSQL

使用pg8000将xml数据插入到PostgreSQL
EN

Stack Overflow用户
提问于 2021-01-13 13:48:57
回答 1查看 80关注 0票数 0

我有一个包含XML数据的S3文件,我需要将其插入到极光PostgreSQL数据库(PostgreSQL 11.9)的表中。为此,我正在尝试使用AWS lambda。在lambda函数中,我从S3对象中读取数据,并使用pg8000尝试在表中插入记录。插入sql失败,错误为

代码语言:javascript
复制
[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

代码语言:javascript
复制
<?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文件读取数据的代码

代码语言:javascript
复制
    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)

用于插入数据的代码

代码语言:javascript
复制
    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,)
        )

我也试过

代码语言:javascript
复制
INSERT INTO lambda_xml_test (data) values ('%%')", (file_content,)
INSERT INTO lambda_xml_test (data) values (%s)", (file_content,)

关于如何在PG中将XML数据插入到表中,有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 18:53:05

问题是PostgreSQL服务器不知道您发送的数据类型是xml。有关详细信息,请参阅the docs。解决方案是在SQL中放置一个CAST来告诉服务器类型。例如:

代码语言:javascript
复制
cursor.execute(
        "INSERT INTO lambda_xml_test (data) values (CAST(%s as xml))",
        (file_content,)
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65696325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档