2017-07-18 38 views
0

我试图解析一个非常大的MySQL表,它可能不适合内存。那我下面的方法是,使用pymysql用python光标逐行加载数据

db = PyMySQL.connect(**connection_params) 
cur = db.cursor() 
cur.execute('SELECT * FROM big_table') 
for row in cur: 
    process(row) 

我所观察到的是,cur.execute()数据急切地加载到内存中。是否有可能迭代行懒洋洋地

我知道这可以结合LIMITOFFSET子句来完成,但可以以更透明的方式完成吗?

回答

0

你可以得到的结果与数(cur.execute后):

numrows = cur.rowcount 

然后,您可以通过迭代它们用一个简单的:

for num in xrange(0,numrows): 
    row = cursor.fetchone() 
do stuff... 
+0

我知道我可以遍历在'cur.execute()'的结果之上,但问题是它确实加载了数据,这不是我无法承受的一个非常大的表。 – adrpino