我正在使用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
============================我真的很感谢你的帮助。
谢谢,
发布于 2020-06-25 23:25:26
这是使用chunksize时的一个问题。正如@MaxU在他的评论中指出的,chunksize参数创建了一个迭代器。这意味着您正在提交一个查询,并准备好从数据库中接收分块的结果。在您使用整个迭代器之前,数据库将被锁定。
如果数据库没有被锁定,那么它就不能保证查询的结果是准确的,同时允许对数据库进行写/编辑。
要耗尽迭代器,请使用next(dfVars),直到它被扩展,或者循环遍历迭代器,如下所示:
for df_chunk in pd.read_sql(... chunksize=...):
<do something>希望这能有所帮助。
https://stackoverflow.com/questions/36831400
复制相似问题