重复的 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中文网其他相关文章!