Dynamische Daten aus MySQL mithilfe von Python-Abfragen abrufen
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 und sicherstellen, dass die nächste Transaktion die neuesten Daten abruft. So können Sie Ihren Python-Code ändern:
<code class="python"># 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)</code>
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.
Das obige ist der detaillierte Inhalt vonWarum geben nachfolgende Abfragen in einer Python-Schleife dieselben Daten aus einer MySQL-Datenbank zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!