如何使用mysql.connector禁用查询缓存

时间:2014-02-23 20:35:43

标签: python mysql mysql-python kivy

我在我的Kivy应用程序上连接mysql。

import mysql.connector
con = mysql.connector.Connect(host='XXX', port=XXX, user='XXX', password='XXX', database='XXX')
cur = con.cursor()
db = cur.execute("""select SELECT SQL_NO_CACHE * from abc""")
data = cur.fetchall()
print (data)

从另一个连接上插入或删除表abc;我在python上调用相同的查询;但数据没有更新。

我添加查询“SET SESSION query_cache_type = OFF;”在选择查询之前,但它没有用。有人说“选择NOW()...”查询不可缓存,但它不再起作用。我该怎么办?

5 个答案:

答案 0 :(得分:19)

我通过在fetchall()

之后添加代码解决了这个问题
con.commit()

在不进行提交的情况下调用相同的select查询,不会更新结果。

答案 1 :(得分:4)

解决方案是使用:

  • 一次:

    con.autocommit(True)
    
  • 或者,在每次选择查询后:

    con.commit()
    

使用此选项,将在每个选择查询之后进行一次提交。 否则,后续选择将呈现相同的结果。

此错误似乎与Bug #42197有关,与MySQL中的查询缓存和自动提交有关。状态为无法修复

几个月后,这应该是无关紧要的,因为MySQL 8.0 is dropping Query Cache

答案 2 :(得分:1)

我遇到了已经解决并使用上述方法的相同问题。

conn.commit()

我发现不同的DBMS具有不同的行为,并非所有DBMS都存在于连接缓存中

答案 3 :(得分:0)

修改表时会刷新MySQL查询缓存,因此不会产生这种影响。没有看到你的其余代码就不可能说,但很可能你的INSERT / DELETE查询无法运行。

答案 4 :(得分:-1)

试试这个,

conn.autocommit(True);

这将在每个select查询后自动提交。