django objects ... values()只选择一些字段

qdo*_*dot 3 sql memory django optimization

我正在优化此行的内存负载(~2GB,离线记帐和分析例程):

l2 = Photograph.objects.filter(**(movie.get_selectors())).values()
Run Code Online (Sandbox Code Playgroud)

有没有办法说服django在获取值()时跳过某些列?

具体来说,例程获取匹配特定条件的表的所有行(db已经过优化并且非常快速地执行),但是python处理起来有点太多了 - 每行都引用了一个长字符串,存储了url缩略图.

我只需要每行三个字段,但是,如果包含所有字段,它突然消耗大约5kB /行,这可悲地将RAM推到极限.

Nic*_*alu 17

values(*fields)功能允许您指定所需的字段.


Ros*_*ews 5

退房的QuerySet方法,.当您声明only要立即加载某些字段时,QuerySet管理器将不会拉入对象中的其他字段,直到您尝试访问它们为止.

如果你必须处理ForeignKeys,那也必须预先获取,然后检查select_related

Django文档上面的两个链接都有很好的例子,应该澄清它们的用法.


看看Django Debug Toolbar它带有一个debugsqlshell管理命令,当你在django/python shell上玩你的模型时,它可以让你看到生成的SQL查询以及所花费的时间.