重複的MySQL 查詢未傳回最新資料:透過交易提交解決問題
在Python 中,重複查詢快速變更的MySQL 資料庫時,確保每個查詢檢索最新的資料至關重要。但是,有些人可能會遇到這樣的問題:儘管資料庫正在發生更改,但後續查詢仍會傳回相同的資料。這是由於資料庫連接的底層隔離等級所致。
隔離等級的概念決定了事務如何相互隔離。在 MySQL 的預設隔離等級 REPEATABLE READ 的情況下,相同交易中的每個查詢都依賴交易開始時拍攝的資料庫快照。這表示後續查詢不會反映在事務處於活動狀態時所做的任何資料庫變更。
要解決此問題,必須在每個查詢後提交連線。這將啟動一個新事務並確保下一個查詢對最新的資料庫快照進行操作。以下是一個範例:
<code class="python">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>
透過在每次查詢後提交,連線建立了一個新事務,確保後續的每個查詢都會讀取最新的資料庫快照,從而反映最新的資料庫變更。這解決了重複查詢始終傳回過時資料的問題。
以上是為什麼我重複的MySQL查詢沒有回傳最新的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!