Tri*_*daz 3 mysql myisam innodb
我在MySQL应用程序上的Python中遇到了一个非常奇怪的错误.以下代码位于多次调用的循环中.代码从未引发错误,但也从未插入任何数据:
cursor = db.cursor()
cursor.execute("""
INSERT INTO test_1 (value) VALUES (10000);
""")
Run Code Online (Sandbox Code Playgroud)
另一个奇怪的症状是,稍后使用phpMyAdmin将数据插入到同一个表中会产生非常大的auto_increment ID,因此即使表中没有实际数据,auto_increment计数器也会递增(无论如何,根据SELECT*FROM test_1).插件使用MySQL Workbench正常工作.
最后我随机发现使用桌面上的MyISAM引擎代替InnoDB修复它.为什么?
很可能是因为你从未打过电话commit.MySQLdb(我想这是你正在使用的模块)会自动为你对数据库服务器的每个连接启动一个事务.所有插入查询都可以正常工作并增加auto_increment计数器,但是你永远不会看到结果,phpMyAdmin因为InnoDB将其连接与通过python进行的更改隔离开来.如果您的Python脚本断开连接并且未进行任何commit调用,则会回滚事务并且不会保留任何更改(除了递增的auto_increment计数器).看看db.commit()(假设db是连接对象)是否有帮助.
另请参阅PEP 249,了解Python中的数据库访问.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |