Bei der Python-Skripterstellung ist es wichtig, häufig MySQL-Datenbanken abzufragen, um dynamische Daten zu erfassen. Wenn man sich zum Abrufen solcher Daten auf Schleifen verlässt, kann es verwirrend sein, dass nachfolgende Abrufe identische Ergebnisse liefern.
Im angegebenen Python-Skript wird eine Schleife verwendet, um ein MySQL wiederholt auszuführen Fragen Sie die Ergebnisse ab und speichern Sie sie in einer Liste:
<code class="python">for i in range(listSize): # ... # SQL query sql = "SELECT * FROM table" # ...</code>
Trotz der Erwartungen, dass die Schleife die aus der Datenbank bei jeder Iteration abgerufenen Daten aktualisieren würde, ist die Das Skript ruft wiederholt dieselben Ergebnisse ab.
Der Kern des Problems liegt in den Transaktionsisolationsstufen von MySQL. Standardmäßig arbeitet InnoDB, die von MySQL verwendete Speicher-Engine, unter der Isolationsstufe READ COMMITTED, die Folgendes gewährleistet:
„Konsistente Lesevorgänge innerhalb derselben Transaktion lesen den Snapshot, der durch den ersten Lesevorgang erstellt wurde.“
Das bedeutet, dass nachfolgende Abfragen innerhalb einer Transaktion die Daten so abrufen, wie sie zum Zeitpunkt der Initiierung der Transaktion vorhanden waren. Um dieses Problem zu beheben, muss jede Iteration der Schleife mit einem mydb.commit()-Befehl enden.
<code class="python">import ... # ... while True: # ... # SQL query sql = "SELECT * FROM table" # ... mydb.commit()</code>
Durch die Festschreibung der Verbindung zwingt das Skript die Datenbank dazu, während der Transaktion vorgenommene Änderungen zu erfassen, um sicherzustellen, dass nachfolgende Änderungen vorgenommen werden Abfragen spiegeln den aktuellen Status der Datenbank wider.
Jede Schleifeniteration innerhalb einer MySQL-Verbindung wird als separate Transaktion behandelt, die standardmäßig aus liest eine konsistente Momentaufnahme. Durch die Festschreibung der Verbindung am Ende jeder Iteration wird sichergestellt, dass die nachfolgende Transaktion den aktuellsten Snapshot liest, der die in der vorherigen Transaktion vorgenommenen Änderungen widerspiegelt.
Das obige ist der detaillierte Inhalt vonWarum liefern wiederholte MySQL-Abfragen in Python identische Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!