小编典典

Python3-有没有一种方法可以在非常大的SQlite表上逐行进行迭代,而无需将整个表加载到本地内存中?

python

我有一个非常大的表,其中包含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)来遍历整个表?


阅读 214

收藏
2021-01-20

共1个答案

小编典典

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

相反,您可以遍历游标 本身

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

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

2021-01-20