Python3 - 有没有办法在不将整个表加载到本地内存中的情况下逐行迭代非常大的 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 挂起。有没有更好(更 ram 效率)的方法来逐行迭代整个表?

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

相反,您可以循环访问游标本身

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

这将根据需要生成行,而不是先加载所有行。

最新更新