2014-09-12 71 views
-2

我有一個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

您是否已對其進行了配置? – shx2 2014-09-12 21:14:36

+0

你嘗試過線程嗎? – ppalacios 2014-09-12 22:10:58

+0

我們怎麼可能知道是否有任何事情要做?你已經提取出所有相關信息 – 2014-09-12 22:48:39

回答

1

由於Django ORM體系結構(您應該創建大量的Python對象),因此過濾速度很慢,因爲結果很多。

要麼你的請求不好,要麼是誤解,要麼你可以使用Model.objects.raw()進行直接SQL查詢(在某些情況下,速度要快得多10倍)。

您也可以使用直接SQL查詢使用connection對象,但您必須自己處理對象創建(或列表或詞典)。我將它用於項目,查詢速度比Django快60倍,我使用dict(zip(myfieldslist, myresult))來檢索我的結果以與模板兼容。

請參閱:https://docs.djangoproject.com/en/1.7/topics/db/sql/