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.
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