python - 在 Python 中使用 MySQLdb 的长期陈旧结果

标签 python mysql caching

我的 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

但是:

  1. 当我检查交互式 mysql shell 时,它说缓存已打开。 (所以如果这是一个缓存问题,为什么交互式 shell 不会受到它的影响?)

  2. 如果我在 Python 程序中显式执行 SET SESSION query_cache_type = OFF,问题仍然存在。

为每个查询创建一个新的数据库连接是我能够解决问题的唯一方法。

如何从 Python 获取查询以查看我知道的新结果?

最佳答案

This websitethis website包含有关同一问题的信息。为了使您的表保持最新,您必须提交您的事务。使用 db.commit() 来执行此操作。

正如我下面的帖子所提到的,您可以通过启用自动提交来消除对此的需求。这可以通过运行 db.autocommit(True)

来完成

此外,在交互式 shell 中启用了自动提交,因此这解释了为什么您在那里没有遇到问题。

关于python - 在 Python 中使用 MySQLdb 的长期陈旧结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5943418/

相关文章:

caching - 组织内存缓存键

python - 向 Bokeh 图添加附加曲线

python - 为什么 python 在 `pass` 之后继续评估代码?

python - Scrapy提取错误的IMG SRC

php pdo mysql 不会返回带引号的文本

mysql - 存储过程中的语法错误

python - DRF-Extension缓存忽略查询参数

python - django url 标签,不是有效的 View 函数或模式名称

php - Laravel 5 自定义 Eloquent 查询绑定(bind)的用法和限制

ruby-on-rails - 提高 24 小时内返回相同结果的 SQL 查询的性能