Maison  >  Article  >  base de données  >  Pourquoi mes requêtes MySQL répétées ne renvoient-elles pas les dernières données ?

Pourquoi mes requêtes MySQL répétées ne renvoient-elles pas les dernières données ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 03:10:021003parcourir

Why Are My Repeated MySQL Queries Not Returning the Latest Data?

Les requêtes MySQL répétées ne renvoient pas les dernières données : résoudre le problème via la validation de transaction

En Python, tout en interrogeant à plusieurs reprises une base de données MySQL en évolution rapide, il est crucial de s'assurer que chaque requête récupère les données les plus récentes. Cependant, certains peuvent rencontrer le problème où les requêtes ultérieures renvoient des données identiques malgré les modifications de la base de données. Cela est dû au niveau d'isolement sous-jacent de la connexion à la base de données.

Le concept de niveaux d'isolement dicte la manière dont les transactions sont isolées les unes des autres. Dans le cas du niveau d'isolement par défaut de MySQL, REPEATABLE READ, chaque requête au sein de la même transaction s'appuie sur un instantané de la base de données pris au début de la transaction. Cela signifie que les requêtes ultérieures ne refléteront aucune modification de la base de données effectuée pendant que la transaction était active.

Pour résoudre ce problème, il est essentiel de valider la connexion après chaque requête. Cela lance une nouvelle transaction et garantit que la requête suivante fonctionnera sur le dernier instantané de base de données. Voici un exemple :

<code class="python">while True:
    # SQL query
    sql = "SELECT * FROM table"

    # Read the database, store as a dictionary
    mycursor = mydb.cursor(dictionary=True)
    mycursor.execute(sql)

    # Store data in rows
    myresult = mycursor.fetchall()

    # Transfer data into list
    for row in myresult:
        myList[int(row["rowID"])] = (row["a"], row["b"], row["c"])

        print(myList[int(row["rowID"])])

    # Commit !
    mydb.commit()
    print("---")
    sleep (0.1)</code>

En validant après chaque requête, la connexion a établi une nouvelle transaction, garantissant que chaque requête suivante lirait l'instantané de base de données le plus récent, reflétant ainsi les dernières modifications de la base de données. Cela résout le problème des requêtes répétées renvoyant systématiquement des données obsolètes.

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