<p>我的Python程序在MySQL数据库中查询一组表,休眠30秒,然后再次查询,等等。这些表由第三方不断更新,而且(显然)我希望每30秒看到一次新的结果。</p>
<p>假设我的查询如下所示:</p>
<pre><code>"select * from A where A.key > %d" % maxValueOfKeyFromLastQuery
</code></pre>
<p>定期地,我会看到我的程序在一次或两次迭代后停止寻找新结果,即使表中出现了新行<em>。我知道表中有新行,因为当我从交互式mysql(即不是从Python)发出相同的查询时,可以看到它们。</p>
<p>我发现在Python中,如果在每次查询之后终止与数据库的连接,然后为下一次查询建立一个新的连接,问题就会消失。</p>
<p>我想这可能是这里讨论的服务器端缓存问题:<a href="https://stackoverflow.com/questions/2474609/explicit-disable-mysql-query-cache-in-some-parts-of-program">Explicit disable MySQL query cache in some parts of program</a></p>
<p>但是:</p>
<ol>
<li><p>当我检查交互式mysql shell时,它显示缓存已打开。(所以,如果这是一个缓存问题,为什么交互式shell不受影响呢?)</p></li>
<li><p>如果我在Python程序中显式地执行<code>SET SESSION query_cache_type = OFF</code>,问题仍然会出现。</p></li>
</ol>
<p>为每个查询创建一个新的数据库连接是我解决问题的唯一方法。</p>
<p>如何从Python获取查询以查看我知道的新结果?</p>