数据库修改后pymysql重连后才能读取到最新信息的原因与解决方

2019-05-27  本文已影响0人  一念之动即是行

问题代码


lock.acquire()
cursor = self.conn.cursor()
cursor.execute(sql)
data = cursor.fetchall()
#self.conn.commit()
lock.release()
unlock_time = time.time()
cursor.close()

问题原因


mysql数据库的默认存储引擎是(InnoDB)。事务隔离级别是(REPEATABLE READ),它可以防止任何被查询的行被其他事务更改,从而阻止不可重复的读取,而不是 幻读取。它使用中度严格的锁定策略,以便事务内的所有查询都会查看同一快照中的数据,即数据在事务开始时的数据。当创建查询事务时,事务一直没有进行更新,每次查询到的数据都是之前查询结果的快照,因此查询到的一直都是更新前的结果。

解决方案


方案1: 每次查询后进行commit()操作,进行事务更新。
方案2:创建connect连接时,autocommit=True,自动进行commit提交。
方案3:修改事务隔离级别(不推荐)

扩展


MySQL脏读、虚读、幻读

上一篇 下一篇

猜你喜欢

热点阅读