我的 Python 程序查询 MySQL 数据库中的一组表,休眠 30 秒,然后再次查询它们,等等。有问题的表由第三方不断更新,并且(显然)我希望看到每 30 秒产生一次新结果。
假设我的查询如下所示:
"select * from A where A.key > %d" % maxValueOfKeyFromLastQuery
我经常会看到我的程序在一两次迭代后停止寻找新结果,即使表中存在新行。我知道表中存在新行,因为当我从交互式 mysql(即不是来自 Python)发出相同的查询时,我可以看到它们。
我发现,如果我在每次查询后终止与数据库的连接,然后为下一个查询建立一个新连接,Python 中的问题就会消失。
我认为这可能是服务器端缓存问题,如下所述:Explicit disable MySQL query cache in some parts of program
但是:
当我检查交互式 mysql shell 时,它说缓存已打开。 (所以如果这是一个缓存问题,为什么交互式 shell 不会受到它的影响?)
如果我在 Python 程序中显式执行
SET SESSION query_cache_type = OFF
,问题仍然存在。
为每个查询创建一个新的数据库连接是我能够解决问题的唯一方法。
如何从 Python 获取查询以查看我知道的新结果?
最佳答案
This website和 this website包含有关同一问题的信息。为了使您的表保持最新,您必须提交您的事务。使用 db.commit()
来执行此操作。
正如我下面的帖子所提到的,您可以通过启用自动提交来消除对此的需求。这可以通过运行 db.autocommit(True)
此外,在交互式 shell 中启用了自动提交,因此这解释了为什么您在那里没有遇到问题。
关于python - 在 Python 中使用 MySQLdb 的长期陈旧结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5943418/