我有一个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
这样的内容,但我没有看到非常明显的结果。我可以对此查询进行其他改进吗
答案 0 :(得分:1)
由于Django ORM架构(你应该创建很多Python对象),你的过滤器很慢,因为有大量的结果。
要么你的请求不好,要么是误解,要么你可以使用Model.objects.raw()进行直接SQL查询(在某些情况下要快得多10倍)。
您也可以使用connection
对象使用直接SQL查询,但您必须自己处理对象创建(或列表或字典)。我将它用于项目,查询速度比Django快60倍,我使用dict(zip(myfieldslist, myresult))
检索我的结果以与模板兼容。