You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL语句用Python将JSON字符串列表插入Oracle单列表?

解决方案

问题出在executemany的参数格式上:Oracle的Python驱动要求executemany的第二个参数是参数组的可迭代对象(每个参数组对应一行数据,且元素数量要和SQL中的占位符数量一致)。你当前传入的是字符串列表,每个字符串会被拆解成单个字符序列,导致插入错误。

修改步骤:

  1. 调整参数格式:将每个JSON字符串包装为单元素元组(或列表),确保每个参数组匹配SQL中的1个占位符:1。
    可以用列表推导式快速转换:

    json_params = [(item,) for item in json_object]
    
  2. 执行批量插入:

    cmd = "INSERT INTO STG_ETL_RBT(PAYLOAD) VALUES (:1)"
    cursor.executemany(cmd, json_params)
    # 记得提交事务
    connection.commit()
    

优化写法(生成时直接构造元组):

你也可以在生成JSON字符串的阶段直接构造符合要求的参数格式,省去后续转换步骤:

json_object = []
for i in range(len(df_dictionary)):
    json_str = json.dumps(df_dictionary[i], indent=4, default=str)
    json_object.append( (json_str,) )  # 直接存储单元素元组

# 直接执行插入
cmd = "INSERT INTO STG_ETL_RBT(PAYLOAD) VALUES (:1)"
cursor.executemany(cmd, json_object)
connection.commit()

额外说明:

如果STG_ETL_RBT表的PAYLOAD列是Oracle的JSON类型(而非VARCHAR2),可以修改SQL语句显式转换:

INSERT INTO STG_ETL_RBT(PAYLOAD) VALUES (JSON(:1))

内容的提问来源于stack exchange,提问作者Raghunathan P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:35:13