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
相关产品推荐
相关产品推荐

