我在我的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()...”查询不可缓存,但它不再起作用。我该怎么办?
答案 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
查询后自动提交。