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 fourni illustre ce problème :
<code class="python">for i in range(listSize): #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #...</code>
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 du 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.
<code class="python">while True: #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #... mydb.commit() #...</code>
Niveaux d'isolement et valeur par défaut REPEATABLE READ
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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!