„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum gibt meine Python-MySQL-Abfrage immer wieder dieselben Daten zurück?

Warum gibt meine Python-MySQL-Abfrage immer wieder dieselben Daten zurück?

Veröffentlicht am 19.11.2024
Durchsuche:589

Why Does My Python MySQL Query Keep Returning the Same Data?

Abfragen auf MySQL aus Python, die identische Daten liefern

Das wiederholte Abfragen einer MySQL-Datenbank aus 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:

for i in range(listSize):
    #...
    mycursor = mydb.cursor(dictionary=True)
    mycursor.execute(sql)
    #...

Selbst bei Versuchen mit fetchall, fetchmany und fetchone stagnieren die Ergebnisse.

Die Lösung: Festschreiben der Verbindung

Um dieses Problem zu beheben, muss auf jede Abfrageausführung ein Commit der Verbindung folgen. 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.

while True:
    #...
    mycursor = mydb.cursor(dictionary=True)
    mycursor.execute(sql)
    #...
    mydb.commit()
    #...

Isolationsstufen und der REPEATABLE READ-Standard

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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3