迭代django查询的结果

时间:2014-09-12 21:11:39

标签: python django

我有一个django查询,我需要迭代结果,但它的速度非常慢......这里有一些代码

query = <Model>.objects.filter(<filter settings>

results = rollup(query) #This function isn't super important, it's basically just summing over
#specific fields that have specific properties, emptying the rest, and maintaing a few, the 
#result is still a django query set

现在我想做一些像

这样的事情
for r in results:
   #do stuff..

我尝试使用像prefetch_related这样的内容,但我没有看到非常明显的结果。我可以对此查询进行其他改进吗

1 个答案:

答案 0 :(得分:1)

由于Django ORM架构(你应该创建很多Python对象),你的过滤器很慢,因为有大量的结果。

要么你的请求不好,要么是误解,要么你可以使用Model.objects.raw()进行直接SQL查询(在某些情况下要快得多10倍)。

您也可以使用connection对象使用直接SQL查询,但您必须自己处理对象创建(或列表或字典)。我将它用于项目,查询速度比Django快60倍,我使用dict(zip(myfieldslist, myresult))检索我的结果以与模板兼容。

请参阅:https://docs.djangoproject.com/en/1.7/topics/db/sql/