【问题标题】:Insert xml data to PostgreSQL using pg8000使用 pg8000 将 xml 数据插入 PostgreSQL
【发布时间】:2021-04-18 03:14:25
【问题描述】:

我有一个包含 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 表中的任何建议?

【问题讨论】:

    标签: xml postgresql amazon-web-services aws-lambda pg8000


    【解决方案1】:

    问题是 PostgreSQL 服务器不知道你发送的数据类型是xml。请参阅the docs 了解更多信息。解决方案是在 SQL 中放一个CAST 来告诉服务器类型。例如:

    cursor.execute(
            "INSERT INTO lambda_xml_test (data) values (CAST(%s as xml))",
            (file_content,)
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多