25

I'm connecting mysql on my Kivy application.

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)

After inserting or deleting on table abc from another connection; i call the same query on python; but data is not updating.

I add the query "SET SESSION query_cache_type = OFF;" before select query, but it didn't work. Someone said "select NOW() ..." query is not cachable but it didn't work again. What should I do?

kadir_cakir
  • 1,013
  • 1
  • 16
  • 22

5 Answers5

34

I solved this by adding the code after fetchall()

con.commit()

Calling the same select query without doing a commit, won't update the results.

kadir_cakir
  • 1,013
  • 1
  • 16
  • 22
  • 1
    Why was this answer so hard to find? I'm thankful for it. I thought I was going crazy that after updating a row in my table and running a select query again, I was still getting the old values. – Mike Fisher Sep 28 '20 at 03:09
15

The solution is to use:

  • Once:

    con.autocommit(True)
    
  • Or, after each select query:

    con.commit()
    

With this option, there will be a commit after each select query. Otherwise, subsequent selects will render the same result.

This error seems to be Bug #42197 related to Query cache and auto-commit in MySQL. The status is won't fix!

In a few months, this should be irrelevant because MySQL 8.0 is dropping Query Cache.

NBajanca
  • 3,544
  • 3
  • 26
  • 53
3

I encounterd the same problem that has been solved and used the above method.

conn.commit()

and I found that different DBMS has different behavior,not all DBMS exist in the connection cache

Lynn Han
  • 443
  • 6
  • 8
2

try this,

conn.autocommit(True);

this will auto commit after each of you select query.

ANjaNA
  • 1,404
  • 2
  • 16
  • 29
binbincai
  • 31
  • 2
  • 4
    In my case `db.autocommit(True)` did not work. I use mysql-connector-python-2.0.4. I had to use another entry: `db.autocommit = True` and this has helped. – s3n0 Jun 13 '18 at 12:48
0

The MySQL query cache is flushed when tables are modified, so it wouldn't have that effect. It's impossible to say without seeing the rest of your code, but it's most likely that your INSERT / DELETE query is failing to run.