我有两个Python线程访问同一个MySQL数据库,每个都有自己的连接和游标对象。一个线程将记录插入表中。正如我所料,从MySQL Workbench,我看不到表的长度增长,直到写线程执行提交,然后我看到了更改。问题是,我的其他线程没有看到更改:它看到表的旧状态,就好像提交从未发生过一样。当我重新启动应用程序时,表的长度确实被正确读取,但无论写入线程附加多少记录并提交,都会永远停留在那里。我觉得我错过了一些非常明显的东西。
要阅读桌子的长度,我试过: 从mystupidtable中选择count(*) 从mystupidtable中选择count(id) 乃至: 从mystupidtable中选择id
所有这些尝试都返回表的旧状态,就好像提交从未发生过一样。
答案 0 :(得分:2)
听起来第二个线程在隐式打开事务时运行数据库的快照。 (我认为游标会这样做。)如果是这样,将光标提交到第二个线程应该允许它看到新数据。
请参阅 https://dev.mysql.com/doc/refman/5.0/en/innodb-consistent-read.html 和REPEATABLE READ级别。