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

Python 如何使用mysql.connector禁用查询缓存,python,mysql,mysql-python,kivy,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 (d

我正在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\u cache\u type=OFF”,但它不起作用。有人说“select NOW()…”查询不可缓存,但它再次无法工作。我该怎么办?

修改表时会刷新MySQL查询缓存,因此不会产生这种效果。如果看不到代码的其余部分,就无法确定,但很可能您的插入/删除查询无法运行。

我通过在fetchall()之后添加代码来解决这个问题

不进行提交就调用同一个select查询不会更新结果。

试试这个

conn.autocommit(True);

这将在你们每个人
选择
查询后自动提交。

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

conn.commit()

我发现不同的DBMS有不同的行为,并不是所有的DBMS都存在于连接缓存中。解决方案是:

  • 一次:

    con.autocommit(True)
    
  • 或者,在每个select查询之后:

    con.commit()
    
使用此选项,每个select查询之后都会有一个commit。 否则,后续选择将呈现相同的结果

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


几个月后,这应该无关紧要,因为。

事务隔离,可能吗?我现在检查过了。它表示“事务隔离=可重复读取”。这正常吗?请看,我已经测试了“…锁定在共享模式”查询,但当我调用此查询时,我无法从其他连接插入或更新。我想从另一个连接插入或更新,我想在Python上再次调用select query并获得新结果。@user3051668执行插入/更新db call.commit()的代码?不,它没有失败。因为我正在检查HeidiSQL。这应该是问题的答案吗?也许,希望有更好的答案a)你是说下面而不是上面?B) 不,到目前为止,你的答案很难理解,也没有什么帮助。“并非所有DBMS都存在于缓存中”。。。如前所述:没有帮助。在我的情况下,
db.autocommit(True)
不起作用。我使用mysql-connector-python-2.0.4。我不得不使用另一个条目:
db.autocommit=True
,这很有帮助。为什么这个答案这么难找到?我很感激。我觉得我快疯了,在更新表中的一行并再次运行select查询之后,我仍然得到旧的值。
con.commit()