我在MySQL应用程序的Python中遇到了一个非常奇怪的错误。以下代码位于多次调用的循环中。代码从未引发错误,但也从未插入任何数据:
cursor = db.cursor()
cursor.execute("""
INSERT INTO test_1 (value) VALUES (10000);
""")
另一个奇怪的症状是,稍后使用phpMyAdmin将数据插入到同一个表中会产生非常大的auto_increment ID,因此即使表中没有实际数据,auto_increment计数器也会递增(无论如何,根据SELECT * FROM test_1)。使用MySQL Workbench,插入工作正常。
最后我随机发现使用桌面上的MyISAM引擎而不是InnoDB修复它。为什么呢?
答案 0 :(得分:6)
很可能是因为你从未打电话给commit
。 MySQLdb(我想这是你正在使用的模块)automatically starts a transaction用于你对数据库服务器的每个连接。所有插入查询都可以正常工作并增加auto_increment
计数器,但是您永远不会看到phpMyAdmin
的结果,因为InnoDB将其连接与通过python进行的更改隔离开来。如果您的Python脚本断开连接并且未进行commit
调用,则会回滚事务并且不会保留任何更改(除了递增的auto_increment
计数器)。查看db.commit()
(假设db
是连接对象)是否有帮助。