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

