码迷,mamicode.com
首页 > 数据库 > 详细

python使用mysql connection获取数据感知不到数据变化问题

时间:2016-08-21 06:19:37      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

在做数据同步校验的时候,需要从mysql fetch数据和hbase的数据进行对比,发现即使mysql数据变化了,类似下面的代码返回的值还是之前的数据。抽取的代码大概如下:

 1 import MySQL
 2 
 3 conn = MySQL.connect(host = mysql_config[host],
 4                     user = mysql_config[username],
 5                     password = mysql_config[password],
 6                     port = int(mysql_config[port]),
 7                     db = mysql_config[database],
 8                     init_command = SET NAMES UTF8)
 9 
10 cur = conn.cursor()
11 
12 def get_data_from_mysql():
13     sql = "select * from table_a where ****"
14     cur.execute(sql)
15     result = []
16     for line in cur.fetall():
17         result.append(line)
18 
19     return result    

上面的代码,如果反复调用get_data_from_mysql函数,即使对于mysql数据库中同样一条数据变化,程序取出的还是变化之前的数据。

原因解释:这是mysql事务隔离的结果,InnoDB默认的隔离级别是可重复读(REPEATABLE READ),也就是在同一个事务中读取的值总是一样。所以为了感知到变化,必须重新获取一个事务(比方说关闭conneciton重新获取,或者调用commit,也可以改变mysql的事务隔离级别到READ COMMITED)。

 

参考资料:http://stackoverflow.com/questions/29680684/why-do-i-need-to-reconnect-to-the-database-to-see-changes-in-table-data

python使用mysql connection获取数据感知不到数据变化问题

标签:

原文地址:http://www.cnblogs.com/superhedantou/p/5785881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!