Abfragen von Python zu MySQL, die identische Daten liefern
Das wiederholte Abfragen einer MySQL-Datenbank von Python zum Abrufen dynamischer Daten stellt eine Herausforderung dar. Es ist bekannt, dass das bloße Durchlaufen einer Abfrage in einer Schleife nicht ausreicht, um neue Daten aus der Datenbank abzurufen.
Ihr bereitgestellter Code veranschaulicht dieses Problem:
<code class="python">for i in range(listSize): #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #...</code>
Auch bei Versuchen mit fetchall , fetchmany und fetchone, die Ergebnisse bleiben stagnierend.
Die Lösung: Festschreiben der Verbindung
Um dieses Problem zu beheben, muss auf jede Abfrageausführung ein Festschreiben der Verbindung folgen Verbindung. Diese Aktion schließt die laufende Transaktion ab und initiiert eine neue, sodass die nachfolgende Abfrage Änderungen erkennen kann, die während der vorherigen Transaktion vorgenommen wurden.
<code class="python">while True: #... mycursor = mydb.cursor(dictionary=True) mycursor.execute(sql) #... mydb.commit() #...</code>
Isolationsstufen und die REPEATABLE READ-Standardeinstellung
Dieses Konzept basiert auf Isolationsstufen. Standardmäßig verwendet MySQL REPEATABLE READ für InnoDB. Dies bedeutet, dass innerhalb einer Transaktion bei nachfolgenden Lesevorgängen der Snapshot beibehalten wird, der durch den ersten Lesevorgang der Transaktion erstellt wurde. Ohne Commit werden daher bei nachfolgenden Abfragen keine Änderungen erfasst.
Das obige ist der detaillierte Inhalt vonWarum gibt meine Python-MySQL-Abfrage immer wieder dieselben Daten zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!