使用python mysql-connector操作MySQL时update更新表不生效问题咨询
问题根因
你在cur.execute()中传入的参数顺序和SQL占位符的顺序不匹配:
- SQL语句的占位符顺序是先给
target_url字段赋值,后匹配id字段:UPDATE client_url_info SET target_url=%s WHERE id=%s - 你传入的参数顺序是
(data['client_id'], target_url),相当于把client_id赋值给了target_url,用target_url的值去匹配id字段,绝大多数场景下不会匹配到任何符合条件的行,自然不会有数据被更新。
mysql connector执行UPDATE语句时,没有匹配到行不会抛出异常,commit()也会正常执行,所以你会收到成功提示但数据无变化。
修复方案
调整参数顺序即可:
cur.execute('''UPDATE client_url_info SET target_url=%s WHERE id=%s''', (target_url, data['client_id']))
可选排查建议
- 可以在执行
cur.execute()后打印cur.rowcount,查看实际被影响的行数,如果返回0就说明没有匹配到条件的行,方便快速定位这类参数顺序、条件不匹配的问题 - 确保
data['client_id']的类型和表中id字段的类型一致,避免隐式类型转换导致匹配失败的问题
内容的提问来源于stack exchange,提问作者Isaac Rivera
相关产品推荐
相关产品推荐

