如何使用Python字典结合cx_Oracle更新Oracle数据库两列及解决报错
问题解决与实现方案
错误原因
你的my_dict中每个值是元组(比如(0.0, 'Comml')),但代码里错误地调用了row_data.items()——元组没有items()方法,这才触发了AttributeError。
修正后的代码实现
核心逻辑调整
把元组元素和目标列名按顺序对应,同时改用Oracle绑定变量(避免SQL注入风险,也符合数据库最佳实践):
import cx_Oracle # 待更新数据 my_dict = { '8874': (0.0, 'Comml'), '79352': (0.22, 'Resial'), '0600147': (0.464, 'Reential'), } # 数据库连接配置(根据实际情况修改) dsn = cx_Oracle.makedsn("hostname", "port", service_name="service_name") connection = cx_Oracle.connect(user="username", password="password", dsn=dsn) cursor = connection.cursor() try: # 定义列名与元组元素的对应关系(顺序要和元组一致) columns = ['KWag', 'CLASSID'] # 构造带绑定变量的UPDATE语句模板 set_clause = ', '.join([f"{col} = :{col}" for col in columns]) sql = f"UPDATE YOUR_TABLE_NAME SET {set_clause} WHERE NUMBER = :row_key" # 逐行执行更新 for row_key, row_data in my_dict.items(): # 构建绑定变量的参数字典 params = { columns[0]: row_data[0], columns[1]: row_data[1], 'row_key': row_key } cursor.execute(sql, params) # 提交事务 connection.commit() print("更新完成") except Exception as e: # 出错回滚事务 connection.rollback() print(f"更新失败: {str(e)}") finally: # 关闭游标和连接 cursor.close() connection.close()
关键说明
- 替换代码中的
YOUR_TABLE_NAME、数据库连接参数(hostname、port、service_name、username、password)为你的实际信息。 - 使用绑定变量
:KWag、:CLASSID、:row_key代替字符串拼接,彻底避免SQL注入风险,同时提升执行效率。 - 元组元素顺序必须和
columns列表的顺序严格对应(第一个元素对应KWag,第二个对应CLASSID)。 - 事务处理:执行完成后必须
commit,出错时rollback保证数据一致性。
内容的提问来源于stack exchange,提问作者Udeh Ebenezer Ifechukwu
相关产品推荐
相关产品推荐

