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

Python中MySQLdb执行update无报错但数据库未更新

解决MySQLdb执行UPDATE语句无报错但数据库未更新的问题

这大概率是事务未提交导致的!MySQLdb的数据库连接默认是关闭自动提交(autocommit)状态的,哪怕你的execute()执行成功,修改操作也只是停留在当前事务中,并没有真正同步到数据库里——而PHPMyAdmin默认会自动提交事务,所以在那里执行语句能生效。

最直接的解决方案:手动提交事务

在执行完cursor.execute()之后,调用数据库连接对象的commit()方法:

update_query = "update user_details set `address`='%s' where `id`='%s'"
cursor.execute(update_query, (address, id1))
# 新增这行提交事务,将修改同步到数据库
db_connection.commit()
print(cursor._last_executed)

注意这里的db_connection是你创建数据库连接时的对象,比如你用db = MySQLdb.connect(...)创建的连接,就对应db.commit()。

可选方案:开启自动提交

如果你希望所有数据库操作都自动提交,可以在创建连接时开启autocommit参数:

db_connection = MySQLdb.connect(
    host='你的主机地址',
    user='数据库用户名',
    passwd='数据库密码',
    db='目标数据库名',
    autocommit=True  # 开启自动提交模式
)

额外排查点

如果提交事务后还是没生效,可以检查这几点:

  • 确认Python代码连接的数据库和PHPMyAdmin操作的是同一个数据库(比如是不是不小心连到了测试环境的库)
  • 检查id字段的类型:如果id是整数类型,建议参数传递时保持类型一致,比如把id1转成整数,同时SQL语句里去掉id的引号(参数化查询会自动处理类型转换):
    update_query = "update user_details set `address`=%s where id=%s"
    cursor.execute(update_query, (address, int(id1)))
    
  • 查看受影响行数:执行print(cursor.rowcount),如果输出是0,说明没有匹配到id='242069'的记录,需要检查id1的值是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:58:49