Python クエリを使用した MySQL からの動的データの取得
Python から急速に変化する MySQL データベースに定期的にクエリを実行する場合、ループベースの一貫して最新のデータを取得するアプローチ。ただし、同じデータが繰り返し返される状況が発生する可能性があります。
この問題は、MySQL のデフォルトの分離レベルである REPEATABLE READ に起因します。このレベルでは、トランザクション内の読み取りでは、トランザクションの開始時に存在していたデータのスナップショットが使用されます。同じトランザクション内の後続のクエリは、このスナップショットを更新するのではなく、このスナップショットから読み取ります。
これを解決するには、各クエリの後に接続をコミットして、次のトランザクションが最新のデータを取得できるようにする必要があります。 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)
各クエリの後に mydb.commit() を追加することで、MySQL にトランザクションをコミットさせ、スナップショットを更新させます。これにより、後続のクエリで最新のデータにアクセスできるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3