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

时间: 2024-11-21 06:49:37

python使用mysql connection获取数据感知不到数据变化问题的相关文章

python从数据库中获取utf8格式的中文数据输出时变成问号或乱码

我用python操作mysql数据库,数据库中数据格式为utf8,我使用python调用select语句后获取到数据库的信息,然后使用print打印出来的时候,原本中文数据却无法显示,显示出来的是一串?,为了解决这个问题,我也是绞尽脑汁啊. 我在网上搜集了很多资料,大家都说是windows默认的格式是'GBK',输出从mysql数据库中获取到的中文数据时,需要这样写: 假设info是从数据库中获取的中文值 print info.decode('UTF-8').encode('GBK') 结果:

Python操作MySQL数据库(检索/删除数据库中数据)

1.准备安装Python的mysql模块"MySQLdb"和Python表格模块"prettytable"(之前文章已介绍,在此不在赘述) [[email protected] ~]# python Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36)  [GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2 Type "help", "copyrig

Python/Shell/MySQL时间获取与格式转换

一.说明 时间的获取及时间各格式间的转换是比较常用的操作,但一是多种语言经常容易弄混,二是同一种语言同一个功能可能有不同的实现函数,导致每次处理时间经常要百度所以来记录一下. 另外个人真不喜欢同样功能有多种写法的形式,从理想角度说多种实现方式让不同的人都能以其喜欢的方式进行编写:但实际上当你忘记的时候,你就总要怀疑是不是这么写.可不可以这么写.到底怎么写,然后到网上看又是五花八门的写法,这是个很耗费精力的事情.这也是我不喜欢Ruby的原因. 二.Python时间操作 2.1 获取时间对象 imp

联合分组、子查询、视图、事务、python操作mysql、索引

目录 联合分组.子查询.视图.事务.python操作mysql.索引 一.联合分组 二.子查询 三.all 与any:区间修饰条件 四.视图:view 视图的增删改 五.事务 5.1.事务的概念 5.2.事务的四大特性 六.pymysql 模块:python操作mysql 6.1 安装pymysql 模块 6.2 python用pymysql 操作mysql步骤 6.3 游标操作 6.4 pymysql事务 6.5 sql注入 七.索引 联合分组.子查询.视图.事务.python操作mysql.

python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库

前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 “test-mysql”. Python 操作 MySQL 我们使用的IDE是 “神奇” 的 pycharm: 1. 首先新建一个python的项目,并且安装 “mysql-connector-python”. “mysql-connector-python” 是MySQL官方对于python的数据驱动,感兴趣的童鞋可以移步这里: https://dev.mysql

Python操作mysql之插入数据

之前有写过一篇python查询mysql数据的文章,今天写通过python插入数据到mysql数据库. 1.先建库,建表,建用户 mysql> create database top_ten; mysql> use top_ten mysql> create table log (id int PRIMARY KEY  AUTO_INCREMENT, ip char(20), url char(30), status int, total int) charset=utf8; mysql

Python获取股票历史数据和收盘数据的代码实现

各种股票软件,例如通达信.同花顺.大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想做更复杂的分析,例如回归分析.关联分析等就有点捉襟见肘,所以最好能够获取股票历史及实时数据并存储到数据库,然后再通过其他工具,例如SPSS.SAS.EXCEL或者其他高级编程语言连接数据库获取股票数据进行定量分析,这样就能实现更多目的了. 为此,首先需要找到可以获取股票数据的接口,新浪.雅虎.腾讯等都有接口可以实时获取股票数据,历史数据选择了雅虎接口,收盘数据选择了腾讯接口. (1)项

Python 2.7_多进程获取简书专题数据(一)

学python几个月了正好练练手,发现问题不断提高,先从专题入手,爬取些数据,一开始对简书网站结构不熟悉,抓取推荐,热门,城市3个导航栏,交流发现推荐和热门是排序不同,url会重复,以及每个专题详情页三个类目最新评论,最新收录, 热门也会重复 做了下调整,代码执行完毕会返回所有专题的urls元组对象,以便下一步进入每个专题页面解析获取其他数据.注:变量focus关注数,和打开专题后最上面显示的专题关注人数会有差异,例如有的专题关注了10175人,在专题列表页会显示成"10.07k",因

使用Python向MySQL数据库中存入json类型数据

0.说明 因为出于个人项目的需要,获取到的数据都是json类型的,并且都要存入MySQL数据库中,因为json类型数据不像一般的文本数据,所以在存入MySQL时需要注意的问题很多. 在网上找了很多方法,整理了一下比较实用可靠的,总结下来就是下面的过程: MySQL表中需要保证存储json数据的列类型为BLOB: 使用sql语句时,使用MySQLdb.excape_string函数来对json数据进行转义: 查询数据时,将结果使用json.loads就能够得到原来的Python数据类型: 下面就来