Maison > base de données > tutoriel mysql > Pourquoi les requêtes MySQL répétées en Python renvoient-elles des résultats identiques ?

Pourquoi les requêtes MySQL répétées en Python renvoient-elles des résultats identiques ?

Patricia Arquette
Libérer: 2024-11-08 21:10:02
original
261 Les gens l'ont consulté

Why Do Repeated MySQL Queries in Python Return Identical Results?

Récupération de données persistantes à partir de requêtes MySQL répétées en Python

Dans les scripts Python, il est essentiel d'interroger fréquemment les bases de données MySQL pour capturer des données dynamiques. Lorsqu'on s'appuie sur des boucles pour récupérer de telles données, il peut être déroutant de constater que les récupérations suivantes renvoient des résultats identiques.

Problème

Dans le script Python donné, une boucle est utilisée pour exécuter à plusieurs reprises un MySQL interrogez et stockez les résultats dans une liste :

<code class="python">for i in range(listSize):
    # ...
    # SQL query
    sql = "SELECT * FROM table"
    # ...</code>
Copier après la connexion

Malgré les attentes selon lesquelles la boucle actualiserait les données extraites de la base de données à chaque itération, le script récupère les mêmes résultats à plusieurs reprises.

Solution

Le nœud du problème réside dans les niveaux d'isolation des transactions de MySQL. Par défaut, InnoDB, le moteur de stockage utilisé par MySQL, fonctionne sous le niveau d'isolement READ COMMITTED, qui garantit ce qui suit :

"Des lectures cohérentes au sein de la même transaction lisent l'instantané établi par la première lecture."

Cela signifie que les requêtes ultérieures au sein d'une transaction récupèrent les données telles qu'elles existaient au moment du lancement de la transaction. Pour résoudre ce problème, chaque itération de la boucle doit se terminer par une commande mydb.commit().

<code class="python">import ...
# ...
while True:
    # ...
    # SQL query
    sql = "SELECT * FROM table"
    # ...
    mydb.commit()</code>
Copier après la connexion

En validant la connexion, le script force la base de données à capturer les modifications apportées au cours de la transaction, garantissant que les modifications ultérieures les requêtes reflètent l'état actuel de la base de données.

Explication

Chaque itération de boucle au sein d'une connexion MySQL est traitée comme une transaction distincte, qui lit par défaut à partir d'un instantané cohérent. La validation de la connexion à la fin de chaque itération garantit que la transaction suivante lit l'instantané le plus récent, reflétant les modifications apportées lors de la transaction précédente.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal