zoukankan      html  css  js  c++  java
  • python使用mysql connection获取数据感知不到数据变化问题

    在做数据同步校验的时候,需要从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

  • 相关阅读:
    .NETCore 之 中间件 02
    .NETCore 之 中间件 01
    .NetCore 之AOP扩展ExceptionFilter
    Unity ICO
    CentOS7离线安装Mysql8.0
    CentOS7离线安装devtoolset-9并编译redis6.0.5
    Centos7离线安装gcc4.8
    C#进行图片压缩(对jpg压缩效果最好)
    实现ASP.Net Core3.1运行在DockeDesktop下并用Nginx实现负载均衡
    WPF实现TextBlock呼吸灯效果
  • 原文地址:https://www.cnblogs.com/superhedantou/p/5785881.html
Copyright © 2011-2022 走看看