在 Python 脚本编写中,频繁查询 MySQL 数据库以捕获动态数据至关重要。当依靠循环来检索此类数据时,发现后续提取返回相同的结果可能会令人困惑。
在给定的 Python 脚本中,循环用于重复执行 MySQL查询并将结果存储在列表中:
<code class="python">for i in range(listSize): # ... # SQL query sql = "SELECT * FROM table" # ...</code>
尽管预期循环会在每次迭代时刷新从数据库检索的数据,但脚本会重复检索相同的结果。
问题的症结在于MySQL的事务隔离级别。默认情况下,MySQL 使用的存储引擎 InnoDB 在 READ COMMITTED 隔离级别下运行,这可确保以下内容:
“同一事务内的一致性读取会读取第一次读取建立的快照。”
这意味着事务中的后续查询将检索事务启动时存在的数据。为了解决这个问题,循环的每次迭代都必须以 mydb.commit() 命令结束。
<code class="python">import ... # ... while True: # ... # SQL query sql = "SELECT * FROM table" # ... mydb.commit()</code>
通过提交连接,脚本强制数据库捕获事务期间所做的更改,确保后续查询反映了数据库的当前状态。
MySQL 连接中的每个循环迭代都被视为一个单独的事务,默认情况下从一致的快照读取。在每次迭代结束时提交连接可确保后续事务读取最新的快照,反映前一个事务中所做的更改。
以上是为什么 Python 中重复的 MySQL 查询返回相同的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!