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

Python操作MySQL执行UPDATE语句报ProgrammingError如何解决

错误排查结果

你的SQL查询和调用逻辑存在两处明确问题:

  • 占位符拼写错误:SQL语句中WHERE id = &s里的&s是错误写法,MySQL Python连接器的参数占位符统一为%s,该错误会导致驱动只能识别到1个占位符,和你传入的2个参数数量不匹配,就是你遇到的报错的直接原因
  • 参数顺序风险:直接将row转成元组传入execute方法,需要严格保证DataFrame的列顺序为[removed, id],否则会出现值对应错位的问题,更稳妥的写法是显式按占位符顺序取字段值

修正后的参考代码

c = mydb.cursor(buffered=True)
# 修正占位符错误
sql = "UPDATE `bas` SET removed = %s WHERE id = %s"

for i,row in df.iterrows():
    # 显式指定参数顺序,避免df列顺序变化导致错误
    c.execute(sql, (row['removed'], row['id']))

# 批量提交,提升执行效率
mydb.commit()
c.close()

如果数据量较大,可以用executemany批量执行进一步提升效率:

c = mydb.cursor(buffered=True)
sql = "UPDATE `bas` SET removed = %s WHERE id = %s"
# 预生成所有参数列表
params = [(row['removed'], row['id']) for i,row in df.iterrows()]
c.executemany(sql, params)
mydb.commit()
c.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:15:05