我正在尝试从一个很大的mysql查询中获取结果,并将其写入Python中的文件中,但是我一直遇到内存过载错误。在内存用完并崩溃之前,我已经轻松地将RAM利用率提高到60+ GB。我如何有效地做到这一点?
这是我的代码段:
with connection.cursor() as cursor:
cursor.execute(my_query)
row = cursor.fetchone()
while row is not None:
with open(my_file,'a+') as f:
f.writelines(row)
row = cursor.fetchone()
即使我原本以为一次内存中只有一行,这仍然使我的内存超负荷。
我还尝试过在每行上使用f.flush(),以及重新打开文件然后在每行上运行f.close()。
非常感谢!
[好吧,@ Willyzekid向我指出了正确的方向,我明白了。除了存在游标内存问题外,我通过这篇文章发现了这一问题:MySQLdb - cursor - memory leak?
我也没有意识到,在我的代码片段上方,我已经从一个查询中获取了输出,并将其用作该查询片段中的输入。我正在将第一个查询的输出加载到内存中,这也使它超载。 @Willyzekid突出显示的同一问题,只是在代码的不同位置。
谢谢!