Python3 - 有没有办法在一个非常大的SQlite表上逐行迭代而不将整个表加载到本地内存中?

时间:2015-04-11 20:29:56

标签: python sqlite

我有一个非常大的表,有250,000多行,其中很多都在其中一列中包含一个大文本块。目前它的容量为2.7GB,预计至少增长十倍。我需要在表的每一行上执行特定于python的操作,但是一次只需要访问一行。

现在我的代码看起来像这样:

c.execute('SELECT * FROM big_table') 
table = c.fetchall()
for row in table:
    do_stuff_with_row

当表格较小时,这个工作正常,但是当我尝试运行它时,表格现在比我可用的ram和python挂起的要大。是否有更好的(更有效率的)方法在整个表上逐行迭代?

1 个答案:

答案 0 :(得分:27)

cursor.fetchall()首先将所有结果提取到列表中。

相反,您可以迭代光标本身

c.execute('SELECT * FROM big_table') 
for row in c:
    # do_stuff_with_row

这会根据需要生成行,而不是首先加载它们。