我的基本问题陈述是,我想从具有 100 万行的表中一次只提取 2000 行的每一行。在评估这些分块查询后,我想删除每一行。
所以就说我有
a = Model.objects.filter(id=1<2000)
b = Model.objects.filter(id=2000<4000)
c = Model.objects.filter(id=4000<6000)
..
..
现在,如果我通过某种方式将所有这些查询集组合成一个查询集
del = a + b + c +d ......
我做
del.delete()
那么它会在更短的时间内删除所有行还是会再次重新处理查询以删除它们并且需要时间?
最佳答案
查询集是 lazy-evaluated所以这不会有性能提升效果。但是,如果你想减少内存消耗,那么你可以使用 (iterator)[ https://docs.djangoproject.com/en/3.0/ref/models/querysets/#iterator]使用 chunk_size 参数集:
for record in Model.objects.all().iterator(chunk_size=2000):
record.delete()
否则,如果你真的想提高删除速度,那么你可以尝试使用未公开的方法_raw_delete
a = Model.objects.all()
a._raw_delete(a.db)
除非:
on_delete=CASCADE
)关于django - 如何从django中的db中获取数据 block 然后删除它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60736901/