„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 geben nachfolgende Abfragen in einer Python-Schleife dieselben Daten aus einer MySQL-Datenbank zurück?

Warum geben nachfolgende Abfragen in einer Python-Schleife dieselben Daten aus einer MySQL-Datenbank zurück?

Veröffentlicht am 10.11.2024
Durchsuche:597

Why Do Subsequent Queries in a Python Loop Return the Same Data from a MySQL Database?

Abrufen dynamischer Daten aus MySQL mithilfe von Python-Abfragen

Wenn Sie eine sich schnell ändernde MySQL-Datenbank regelmäßig von Python aus abfragen, erwarten Sie möglicherweise eine schleifenbasierte Abfrage Ansatz, um stets die neuesten Daten abzurufen. Es kann jedoch vorkommen, dass dieselben Daten wiederholt zurückgegeben werden.

Dieses Problem ist auf die Standardisolationsstufe von MySQL, REPEATABLE READ, zurückzuführen. Auf dieser Ebene verwenden Lesevorgänge innerhalb einer Transaktion einen Snapshot der Daten, wie sie zu Beginn der Transaktion vorhanden waren. Nachfolgende Abfragen innerhalb derselben Transaktion lesen aus diesem Snapshot, anstatt ihn zu aktualisieren.

Um dieses Problem zu beheben, müssen Sie die Verbindung nach jeder Abfrage festschreiben, um sicherzustellen, dass die nächste Transaktion die neuesten Daten abruft. So können Sie Ihren Python-Code ändern:

# 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 !
    mydb.commit()
    print("---")
    sleep (0.1)

Durch das Hinzufügen von mydb.commit() nach jeder Abfrage zwingen Sie MySQL, die Transaktion festzuschreiben und den Snapshot zu aktualisieren. Dadurch können nachfolgende Abfragen auf die aktuellsten Daten zugreifen.

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