MySQL-Abfragen von Python führen zu Inkonsistenzen
Ihre Abfrage ruft wahrscheinlich nicht die aktuellsten Daten ab, weil Sie sich nicht verpflichten Änderungen an der Datenbank. Standardmäßig setzt MySQL die Isolationsstufe auf „REPEATABLE READ“, was bedeutet, dass nachfolgende Abfragen innerhalb derselben Transaktion den ersten Snapshot der Daten anzeigen und nicht etwaige Änderungen, die während der Transaktion vorgenommen wurden.
Um sicherzustellen, dass Ihre Daten aktuell sind - Bisher müssen Sie die Verbindung nach jeder Abfrage festschreiben. Dadurch wird die aktuelle Transaktion abgeschlossen und die nächste Transaktion vorbereitet, um die neuesten Änderungen aus der Datenbank abzurufen.
Hier ist eine aktualisierte Version Ihres Codes mit dem erforderlichen Commit:
<code class="python"># Main loop 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 changes! mydb.commit() print("---") sleep(0.1)</code>
Mit dieser Änderung , ruft Ihr Code nun während jeder Abfrageschleife die neuesten Daten aus der Datenbank ab.
Das obige ist der detaillierte Inhalt vonWarum liefern meine MySQL-Abfragen von Python inkonsistente Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!