Python クエリを使用した MySQL からの動的データの取得
急速に変化する MySQL データベースを Python から定期的にクエリする場合、ループベースの一貫して最新のデータを取得するアプローチ。ただし、同じデータが繰り返し返される状況が発生する可能性があります。
この問題は、MySQL のデフォルトの分離レベルである REPEATABLE READ に起因します。このレベルでは、トランザクション内の読み取りでは、トランザクションの開始時に存在していたデータのスナップショットが使用されます。同じトランザクション内の後続のクエリは、このスナップショットを更新するのではなく、このスナップショットから読み取ります。
これを解決するには、各クエリの後に接続をコミットして、次のトランザクションが最新のデータを取得できるようにする必要があります。 Python コードを変更する方法は次のとおりです。
<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>
各クエリの後に mydb.commit() を追加することで、MySQL にトランザクションをコミットしてスナップショットを更新させます。これにより、後続のクエリで最新のデータにアクセスできるようになります。
以上がPython ループの後続のクエリが MySQL データベースから同じデータを返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。