MySQLdb está guardando en caché los resultados SELECT?

Estoy ejecutando una consulta SELECT en un bucle.

De vez en cuando, la tabla de la base de datos se actualiza (por otro progtwig).

El primer SELECT recupera los datos correctos, pero más llamadas en el bucle devuelven los primeros valores .

¿Cómo puedo recuperar datos actualizados?

La única solución que encontré hasta ahora, es volver a conectar con el DB en cada iteración. En mi ejemplo, no comentar AMBOS comentarios # 1 # y # 2 #. Si no se comenta solo # 2 # no es suficiente (es decir, se vuelve a crear el cursor), los resultados aún se almacenan en caché.

Aquí hay una muestra de trabajo que da el error.

import MySQLdb from time import sleep class DB: def __init__(self): self.connection = MySQLdb.connect(mysql_host, mysql_user, mysql_pass, mysql_db) self.cursor = self.connection.cursor() def get(self): sql = ''' SELECT id, message FROM mps_messages WHERE topic=%s ORDER BY id LIMIT 1 ''' #1# self.connect() #2# self.cursor = self.connection.cursor() self.cursor.execute(sql, ("topic",) ) rec = self.cursor.fetchone() print rec def loop(self): while True: self.get() sleep(4) db=DB() db.loop() 
  • OS: ubuntu,
  • python: 2.7.4
  • mysqldb: 1.2.3
  • mysql: 5.5.34

tuve que añadir

 connection.autocommit(True) 

Agregar SQL_NO_CACHE no tuvo ningún efecto en el caso presentado, aparentemente porque no hubo almacenamiento en caché involucrado.

Todavía no entiendo por qué un SELECT necesita COMPROMISO.

Abriré una nueva pregunta al respecto.

Puede utilizar SELECT con la palabra clave SQL_NO_CACHE :

 SELECT SQL_NO_CACHE id, message FROM mps_messages WHERE topic=%s ORDER BY id LIMIT 1