我有一个非常大的表,有250,000多行,其中很多都在其中一列中包含一个大文本块。目前它的容量为2.7GB,预计至少增长十倍。我需要在表的每一行上执行特定于python的操作,但是一次只需要访问一行。
现在我的代码看起来像这样:
c.execute('SELECT * FROM big_table')
table = c.fetchall()
for row in table:
do_stuff_with_row
当表格较小时,这个工作正常,但是当我尝试运行它时,表格现在比我可用的ram和python挂起的要大。是否有更好的(更有效率的)方法在整个表上逐行迭代?
答案 0 :(得分:27)
cursor.fetchall()
首先将所有结果提取到列表中。
相反,您可以迭代光标本身:
c.execute('SELECT * FROM big_table')
for row in c:
# do_stuff_with_row
这会根据需要生成行,而不是首先加载它们。