Python使用cx_Oracle操作Oracle数据库时如何批量更新多行数据
问题原因
你当前的写法直接将Python侧的变量名emp_list写入SQL字符串,Oracle数据库无法识别Python的变量,会将emp_list尝试解析为数据库内的列名,因此触发字段不存在的报错。同时直接拼接变量进SQL还存在SQL注入的安全风险,不推荐使用。
正确实现方案
使用参数化查询的方式动态适配可变长度的emp_list,以cx_Oracle连接Oracle为例,写法如下:
emp_list = [123,576, 686, 783] # 先判断列表非空,避免空IN子句导致语法错误 if emp_list: # 生成和列表长度匹配的Oracle占位符,格式为:1,:2,:3... placeholders = ', '.join([f':{i+1}' for i in range(len(emp_list))]) statement = f"UPDATE employee SET close_emp_data = 7 WHERE emp_id in ({placeholders})" # 执行时传入emp_list作为参数,数据库会自动匹配占位符 curs.execute(statement, emp_list) connection.commit()
如果使用其他Oracle连接库,仅需要调整占位符格式即可,比如部分库使用%s作为占位符,只需把占位符生成逻辑改为placeholders = ', '.join(['%s'] * len(emp_list))即可,执行时传参的逻辑保持不变。
内容的提问来源于stack exchange,提问作者Tejaswi Adepu
相关产品推荐
相关产品推荐

