鱼C论坛

 找回密码
 立即注册
查看: 2128|回复: 4

[已解决]oracledb的cursor.executemany如何使用批量update?

[复制链接]
发表于 2023-9-6 14:36:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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的数据格式是什么样子的?
按照网上找到的,都无法通过。

最佳答案
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中占位符的数量一致,以避免出现参数不匹配的错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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中占位符的数量一致,以避免出现参数不匹配的错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-6 15:01:53 | 显示全部楼层
真是见了鬼了。。。我就是按照2楼的格式设置data,运行就报错
看到2楼的回复,再次运行,竟然通过了,我滴乖乖。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 15:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表