Heim  >  Artikel  >  Datenbank  >  Warum liefern wiederholte MySQL-Abfragen in Python identische Ergebnisse?

Warum liefern wiederholte MySQL-Abfragen in Python identische Ergebnisse?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 21:10:02153Durchsuche

Why Do Repeated MySQL Queries in Python Return Identical Results?

Persistenter Datenabruf aus wiederholten MySQL-Abfragen in Python

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.

Problem

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.

Lösung

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.

Erklärung

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn