为什么MyISAM解决了InnoDB引起的这个问题?

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修复它.为什么?

Sim*_*mon 6

很可能是因为你从未打过电话commit.MySQLdb(我想这是你正在使用的模块)会自动为你对数据库服务器的每个连接启动一个事务.所有插入查询都可以正常工作并增加auto_increment计数器,但是你永远不会看到结果,phpMyAdmin因为InnoDB将其连接与通过python进行的更改隔离开来.如果您的Python脚本断开连接并且未进行任何commit调用,则会回滚事务并且不会保留任何更改(除了递增的auto_increment计数器).看看db.commit()(假设db是连接对象)是否有帮助.

另请参阅PEP 249,了解Python中的数据库访问.