Consultas en MySQL desde Python que generan datos idénticos
Consultar repetidamente una base de datos MySQL desde Python para recuperar datos dinámicos plantea un desafío. Se sabe que simplemente iterar a través de una consulta en un bucle no es suficiente para obtener datos nuevos de la base de datos.
El código proporcionado ejemplifica este problema:
for i in range(listSize):
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
Incluso con los intentos de usar fetchall, fetchmany y fetchone, los resultados permanecen estancados.
La solución: confirmar la conexión
Para resolver esto, cada ejecución de consulta debe ir seguida de una confirmación de la conexión. Esta acción concluye la transacción en curso e inicia una nueva, lo que permite que la consulta posterior detecte modificaciones realizadas durante la transacción anterior.
while True:
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
mydb.commit()
#...
Niveles de aislamiento y LECTURA REPETIBLE predeterminada
Este concepto tiene sus raíces en los niveles de aislamiento. De forma predeterminada, MySQL emplea LECTURA REPETIBLE para InnoDB. Esto implica que dentro de una transacción, las lecturas posteriores retendrán la instantánea establecida por la lectura inicial de la transacción. Por lo tanto, sin confirmar, las consultas posteriores no capturarán ninguna modificación.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3