对于大多数项目,内存负载最重的是将大数据查询加载到python内存中,如
Model.objects.filter(...).order_by(...)[:50]
# The second [:50] is evaluated, the entire dataset is shoved into memory.
在django文档中:提及.defer()和.only()查询集方法作为提示 有助于减少内存使用量,但没有提到更多内容。
我想我的主要问题是,在尝试使用.save()或.delete()模型实例时,是否可以在模型上调用它,除了pk之外的所有延迟? 例如:
model = Model.objects.only("pk").get(pk=12)
# is model.save() or model.delete() okay here?
可能还有其他古怪的案例,其中.only()和.defer()应该被警告,我现在想不出来。它们看起来像是非常有用的方法..如果有人想出任何请发帖,谢谢。
答案 0 :(得分:2)
我不确定为什么在只有save()
字段的模型上调用pk
会有用。但是,如果要删除对象而不会产生实例化对象的开销,则可以使用queryset方法:
MyModel.objects.filter(pk=12).delete()
请注意,这不会调用模型上的任何自定义delete()
方法,但是获取实例并在其上调用delete会更有效。
答案 1 :(得分:0)
only
和defer
始终检索模型的ID,以便正常使用。
然而,如果DEBUG=True
(see docs),Django的orm会为每个查询带来一些内存开销。