Requêtes sur MySQL à partir de Python produisant des données identiques
Interroger à plusieurs reprises une base de données MySQL à partir de Python pour récupérer des données dynamiques pose un défi. Il est connu que le simple fait de parcourir une requête dans une boucle ne suffit pas pour récupérer de nouvelles données de la base de données.
Le code que vous avez fourni illustre ce problème :
for i in range(listSize):
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
Même avec des tentatives utilisant fetchall, fetchmany et fetchone, les résultats restent stagnants.
La solution : valider la connexion
Pour résoudre ce problème, chaque exécution de requête doit être suivie d'une validation de la connexion. Cette action conclut la transaction en cours et en initie une nouvelle, permettant à la requête suivante de détecter les modifications apportées lors de la transaction précédente.
while True:
#...
mycursor = mydb.cursor(dictionary=True)
mycursor.execute(sql)
#...
mydb.commit()
#...
Niveaux d'isolement et valeur par défaut de LECTURE RÉPÉTABLE
Ce concept est ancré dans les niveaux d'isolement. Par défaut, MySQL utilise REPEATABLE READ pour InnoDB. Cela implique qu'au sein d'une transaction, les lectures ultérieures conserveront l'instantané établi par la lecture initiale de la transaction. Par conséquent, sans engagement, les requêtes ultérieures ne captureront aucune modification.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3