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!