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

Python使用pyodbc通过字典数据更新SQL Server Resource表的正确方法

解决方法

你可以用pyodbc的executemany方法批量完成更新操作,无需循环单条处理,具体实现如下:

注意:不要用dict作为变量名,这是Python内置类型的关键字,会引发不可预期的错误,建议先把你的字典变量改名为update_data。

import pyodbc

# 替换为你自己的更新数据
update_data = {'NAME': ['xyz', 'xyz', 'xyz'], 'TARGET': ['bb', 'aa', 'bg'], 'MEAN': [3.1, 3.7, 2.8], 'MINIMUM': [2.8, 2.4, 1.3], 'MAXIMUM': [4.5, 5.2, 3.7]}

# 1. 构造参数列表,顺序要和SQL占位符顺序严格对应:Mean值、Max值、Min值、匹配条件Name、匹配条件Target
params = list(zip(
    update_data['MEAN'],
    update_data['MAXIMUM'],
    update_data['MINIMUM'],
    update_data['NAME'],
    update_data['TARGET']
))

# 2. 数据库连接,替换为你自己的连接参数
conn = pyodbc.connect(
    'DRIVER={SQL Server};'
    'SERVER=你的服务器地址;'
    'DATABASE=你的数据库名;'
    'UID=登录账号;'
    'PWD=登录密码;'
)
cursor = conn.cursor()

# 3. 编写更新SQL,pyodbc统一用?作为参数占位符
update_sql = """
UPDATE Resource
SET Mean = ?, Max = ?, Min = ?
WHERE Name = ? AND Target = ?
"""

# 4. 批量执行更新
cursor.executemany(update_sql, params)

# 5. 提交事务,必须执行该步,否则更新不会写入数据库
conn.commit()

# 关闭连接
cursor.close()
conn.close()

关键说明

  • 不要用Python的f-string、%格式化直接拼接SQL,既存在SQL注入风险,也容易因为数值、字符串格式问题引发语法错误,统一用?作为占位符传参即可。
  • executemany会自动把params列表里的每一组参数代入SQL执行,比循环单条执行效率高很多,适合批量更新场景。
  • pyodbc默认开启手动事务,未执行commit的修改会在连接关闭后自动回滚。

内容的提问来源于stack exchange,提问作者echanam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:57:05