我有一个~10M记录的MySQL表,我使用SqlAlchemy进行交互.我发现对这个表的大型子集的查询将占用太多内存,即使我认为我使用的是内置生成器,智能地获取数据集的一口大小的块:
for thing in session.query(Things):
analyze(thing)
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况,我发现我必须构建自己的迭代器,这些迭代器会以块的形式出现:
lastThingID = None
while True:
things = query.filter(Thing.id < lastThingID).limit(querySize).all()
if not rows or len(rows) == 0:
break
for thing in things:
lastThingID = row.id
analyze(thing)
Run Code Online (Sandbox Code Playgroud)
这是正常的还是有关于SA内置发电机我缺少的东西?
这个问题的答案似乎表明内存消耗是不可预期的.