我有一个非常大的表,有 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
这将根据需要生成行,而不是先加载所有行。