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

