【发布时间】:2022-01-06 14:10:51
【问题描述】:
在我的 python 脚本中使用游标执行将行插入到 oracle 表中需要很多时间。将自动提交设置为 false 但仍然相同。尝试 executemany 没有运气,因为它会引发错误。以下是我的代码:
insert_statement='INSERT INTO mytable
VALUES (:1,:2)
'
r = requests.get(url,cert=(auth_certificate,priv_key),verify=root_cert, timeout=3600, stream=True)
data=json.loads(r.text)
for item in data:
try:
id=(item.Get('data').get("test").get("id"))
except Attribute Error:
id=''
try:
name=(item.Get('data').get("name"))
except Attribute Error:
name=''
rows=(id,name)
cursor.Executemany(insert_statement,rows)
connection_target.commit()
这会引发错误:TypeError:参数应该是序列/字典列表或指定执行语句次数的整数
您能否建议如何正确使用带有 json 数据的 executemany ?
这里是示例 json 数据:
json_data=[{
"publishTime" : "2021-05-29T12:52:15.129Z",
"data" : {
"identifier" : {
"domain" : "AB",
"id" : "1771374",
"version" : "58593668"
},
"Accounts" : [
{
"effectiveEndDate" : "3000-01-01T00:00:00Z",
"Name" : "w (S)",
"effectiveStartDate" : "2016-09-16T04:21:33Z",
"sAccount" : "SGLDPB_A"
}
]
}
}]
【问题讨论】:
-
您的插入语句有 20 列,但您的
rows=(id,name)只有 2 列。您要插入多少列?您能否编辑您的问题以添加有关您的表和 JSON 结构的一些详细信息? -
对不起,我复制了错误的插入语句。现在只有2行,但以后会有很多。我添加了相同的 json 数据输入。只想知道executemany的正确使用方法
-
您将一行传递给
executemany。这不是它的工作原理。您的for循环应该建立一个列表,其中每个元素是您要插入的一行。然后,在循环结束后,您调用executemany并传递您的行列表。