Pandas read_sql元数据锁

时间:2016-04-25 03:06:38

标签: python mysql python-2.7 pandas dataframe

我正在使用pandas来读取mysql表。但是经常在read_sql语句之后我在表上得到一个表锁。以下是查询,

mysql_cn= MySQLdb.connect(host='localhost', port=3306,user='root',passwd='mysql', db='DB_P001')
dfVars = pd.read_sql('select * from markeff_5_varlist', con=mysql_cn, chunksize = 10)

一旦我运行了dfVars数据帧,但是mysql中有一个读锁定。这个锁会一直存在,直到mysql重新启动。

--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
1 read views open inside InnoDB
Main thread process no. 2567, id 140597860407040, state: sleeping
Number of rows inserted 0, updated 0, deleted 0, read 11494
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 3.31 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================

我真的很感激帮助。

谢谢,

1 个答案:

答案 0 :(得分:0)

使用chunksize时出现问题。 @MaxU在其注释中指出的chunksize参数将创建一个迭代器。这意味着您正在提交查询,并准备从数据库中分批接收结果。在消耗完整个迭代器之前,数据库将被锁定。

如果数据库未锁定,那么它将无法保证查询结果准确无误,同时又允许对数据库进行写入/编辑。

要耗尽迭代器,请使用next(dfVars)直到其耗尽或像这样遍历迭代器为止:

for df_chunk in pd.read_sql(... chunksize=...):
    <do something>

希望这会有所帮助。