绿叶游花 发表于 2023-9-6 14:36:45

oracledb的cursor.executemany如何使用批量update?

oracledb和cx_oracle一样的用法
目的:使用python的oracledb模块中cursor.executemany来执行批量update的操作。
1、有这个用法吗?
update_sql = "update tablename set 字段1=:1, 字段2=:2, 字段3=:3 where 字段4=:4"
cursor.executemany(update_sql, data)
connection.commit()
2、如果有,sql语句的格式对吗?data的数据格式是什么样子的?
按照网上找到的,都无法通过。

isdkz 发表于 2023-9-6 14:37:03

1、在oracledb模块中,是支持使用cursor.executemany来执行批量update操作的。您的代码示例是正确的。

update_sql = "update tablename set 字段1=:1, 字段2=:2, 字段3=:3 where 字段4=:4"
cursor.executemany(update_sql, data)
connection.commit()

2、关于data的数据格式,它应该是一个列表(List)的形式,其中每个元素都是一个元组(Tuple)。每个元组表示一条更新语句的参数值。元组的元素顺序需要与update_sql中的占位符一一对应。

例如,如果update_sql中有4个占位符(:1, :2, :3, :4),那么data中的每个元组应该包含4个对应的参数值。

示例代码如下:

data = [
    (value1_1, value1_2, value1_3, value1_4),
    (value2_1, value2_2, value2_3, value2_4),
    ...
]

其中value1_1、value1_2等表示具体的参数值。

请确保data的长度与update_sql中占位符的数量一致,以避免出现参数不匹配的错误。

绿叶游花 发表于 2023-9-6 14:38:32

单条数据的update可以通过
update_sql = "update tablename set 字段1=:1, 字段2=:2, 字段3=:3 where 字段4=:4"
data = {'1':value1, '2':value2, '3':value3, '4':value4}
cursor.execute(update_sql, data)
connection.commit()

绿叶游花 发表于 2023-9-6 15:01:53

真是见了鬼了。。。我就是按照2楼的格式设置data,运行就报错
看到2楼的回复,再次运行,竟然通过了,我滴乖乖。。。

绿叶游花 发表于 2023-9-6 15:29:00

isdkz 发表于 2023-9-6 14:37
1、在oracledb模块中,是支持使用cursor.executemany来执行批量update操作的。您的代码示例是正确的。

u ...

感谢,问题已经得到解决。
还有个问题:
update_sql = "update tablename set 字段1=:1, 字段2=:2, 字段3=:3 where 字段4=:4"
data中的元组,列表中的每一个元组,都是4个参数,且顺序和sql中的一致,可以更新
如果,元组中的数据顺序和sql中的不一样,执行python脚本没有报错,但是数据没有更新
update_sql = "update tablename set 字段1=:2, 字段2=:3, 字段3=:4 where 字段4=:1"
data中的元组是这样的:(字段4的value,字段1的value,字段2的value,字段3的value)
页: [1]
查看完整版本: oracledb的cursor.executemany如何使用批量update?