2

对于大多数项目,内存负载最重的时候是大数据查询加载到 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() ,我现在想不出任何。不过,它们似乎是超级有用的方法。如果有人想出任何方法,请发帖,谢谢。

4

2 回答 2

2

我不确定为什么调用save()只有pk字段的模型会有用。但是,如果您想删除对象而不产生实例化对象的开销,您可以使用 queryset 方法:

MyModel.objects.filter(pk=12).delete()

请注意,这不会调用delete()您在模型上拥有的任何自定义方法,但在其他方面比获取实例并在其上调用 delete 更有效。

于 2013-01-08T09:57:48.280 回答
0

onlydefer始终检索模型的 id,以便它可以正常使用。

然而 Django 的 orm 对每个查询都有一些内存开销 if DEBUG=True请参阅文档)。

于 2013-01-08T07:41:18.330 回答