我正在优化此行的内存负载(~2GB,离线记帐和分析例程):
l2 = Photograph.objects.filter(**(movie.get_selectors())).values()
有没有办法说服django在获取值()时跳过某些列?
具体来说,例程获取符合特定条件的表的所有行(db已经过优化并且执行速度非常快),但是python处理起来有点太多了 - 每行都引用了一个长字符串,存储缩略图的网址。
我真的只需要每行三个字段,但是,如果包含所有字段,它会突然消耗大约5kB /行,这可能会让RAM达到极限。
答案 0 :(得分:17)
values(*fields)
功能允许您指定所需的字段。
答案 1 :(得分:5)
查看QuerySet方法only。当您声明only
希望立即加载某些字段时,QuerySet
管理员不会拉入您对象中的其他字段,直到您尝试访问它们为止。
如果您必须处理ForeignKeys
,那也必须预先提取,那么也请查看select_related
Django文档上面的两个链接都有很好的例子,应该澄清它们的用法。
查看Django Debug Toolbar它带有debugsqlshell
管理命令,当您在django上玩模型时,可以看到生成的SQL查询以及所花费的时间/ python shell。