Python脚本更新MySQL表后修改不持久,请求技术协助
解决mysql-connector修改数据重启脚本后丢失的问题
嘿,这个问题我碰到过好多次——核心原因几乎都是事务没提交!
mysql-connector 默认是关闭自动提交(autocommit)的,这意味着你执行的 INSERT/UPDATE/DELETE 操作只会在当前数据库连接的事务中临时生效。一旦脚本运行结束,连接断开,未提交的事务会被自动回滚,所以下次运行脚本自然看不到之前的修改。
给你两个靠谱的解决方案:
方案1:手动提交事务
在执行完所有修改操作后,显式调用连接对象的 commit() 方法,把事务持久化到数据库:
import mysql.connector # 建立数据库连接 conn = mysql.connector.connect( host="你的主机地址", user="你的用户名", password="你的密码", database="目标数据库名" ) cursor = conn.cursor() # 执行修改操作(比如更新数据) update_sql = "UPDATE your_table SET status = 'active' WHERE id = 100" cursor.execute(update_sql) # 关键步骤:提交事务! conn.commit() # 别忘了关闭资源 cursor.close() conn.close()
方案2:开启自动提交
如果你的场景不需要事务的原子性(比如每个操作都是独立的),可以在建立连接时直接开启自动提交,这样每次执行修改操作后都会自动持久化:
import mysql.connector # 建立连接时开启autocommit conn = mysql.connector.connect( host="你的主机地址", user="你的用户名", password="你的密码", database="目标数据库名", autocommit=True # 开启自动提交 ) cursor = conn.cursor() # 执行修改操作,无需手动commit insert_sql = "INSERT INTO your_table (name, age) VALUES ('Alice', 25)" cursor.execute(insert_sql) # 关闭资源 cursor.close() conn.close()
额外提醒
- 确保你的表使用的是支持事务的引擎(比如 InnoDB,这是MySQL现在的默认引擎),如果是老旧的 MyISAM 引擎,事务功能是不生效的,但现在几乎没人用MyISAM了。
- 如果你需要批量执行多个修改操作,手动提交更安全——可以确保所有操作要么全部成功,要么全部回滚,避免数据不一致。
内容的提问来源于stack exchange,提问作者ca11of lucky
相关产品推荐
相关产品推荐

