You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:22:38