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

时间:2011-08-15 22:04:02

标签: sql django optimization memory

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

l2 = Photograph.objects.filter(**(movie.get_selectors())).values()

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

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

我真的只需要每行三个字段,但是,如果包含所有字段,它会突然消耗大约5kB /行,这可能会让RAM达到极限。

2 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:5)

查看QuerySet方法only。当您声明only希望立即加载某些字段时,QuerySet管理员不会拉入您对象中的其他字段,直到您尝试访问它们为止。

如果您必须处理ForeignKeys,那也必须预先提取,那么也请查看select_related

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


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