Maison  >  Article  >  base de données  >  Pourquoi ma requête Python MySQL continue-t-elle de renvoyer les mêmes données ?

Pourquoi ma requête Python MySQL continue-t-elle de renvoyer les mêmes données ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 12:29:02599parcourir

Why Does My Python MySQL Query Keep Returning the Same Data?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn