我正在编写大量记录,可能是文本文件(zip)中的200万条记录。我想以大块的方式做到这一点。我想将数据流出数据库,而不是一次性加载数据。这样我就可以直接将数据写回来,而不会立即将数据加载到内存中。


我知道它是如何通过块传输的,但我不是确定当文件仍在生成时我应该如何压缩(压缩)文件。


这是我到目前为止所尝试的内容

&# xA; import math
 from django.db.models import Q
 from django.conf import settings
 import uuid

使用open(filename,'w +')作为文件:
对于范围(477)中的y,oparray = [[0表示范围内的x(521)]
 file.write(BCH_HEADER)
对于范围内的sp(1,209):
 local_result = local_BCH.filter(stress_period = sp)
 nonlocal_result = nonlocal_BCH.filter(stress_period = sp)

 if all(i == 0 for local in local_result)和all(i == 0 for i in nonlocal_result)和one:
继续

对于local_result中的r:
 oparray [r.m_row] [r.m_col] = r.recharge
对于非本地结果中的r:
 oparray [r.m_row] [r.m_col] = r.recharge

如果全部(对于我在oparray中i == 0)和一个:
继续

 file.write(BCH_SUBHEADER)
 for x in range(1,477):
对于范围内的y(1,520,10):
 file.write('{:e} {:e} {:e} {:e} {:e} {:e} {:e} {:e} {:e} {:e} \ n'&# xA; .format(oparray [x] [y],oparray [x] [y + 1],oparray [x] [y + 2],oparray [x] [y + 3],
 oparray [x ] [y + 4],oparray [x] [y + 5],oparray [x] [y + 6],oparray [x] [y + 7],
 oparray [x] [y + 8] ,oparray [x] [y + 9]))

如果不是一个:
对于范围(477)中的y,oparray = [[0表示范围内的x(521)]
 second_local_result = second_local_BCH.filter(stress_period = sp)
 second_nonlocal_result = second_nonlocal_BCH.filter(stress_perios = sp)

 if all(i = = 0表示i在second_local_result中)和all(i == 0表示i在second_nonlocal_result中):
继续

对于second_local_result中的r:
 oparray [r.m_row] [r.m_col] = r.recharge
对于second_nonlocal_result中的r:
 oparray [r.m_row] [r.m_col] = r.recharge

如果全部(对于我在oparray中i == 0)和一个:
继续

 file.write(BCH_SUBHEADER)
 for x in range(1,477):
对于范围内的y(1,520,10):
 file.write('{:e} {:e} {:e} {:e} {:e} {:e} {:e} {:e} {:e} {:e} \ n'&# xA; .format(oparray [x] [y],oparray [x] [y + 1],oparray [x] [y + 2],oparray [x] [y + 3],
 oparray [x ] [y + 4],oparray [x] [y + 5],oparray [x] [y + 6],oparray [x] [y + 7],
 oparray [x] [y + 8] ,oparray [x] [y + 9]))
对于范围(477)中的y,oparray = [[0表示范围内的x(521)]
 print('当前位置:',sp)
 return filename