2011-05-10 70 views
2

我有這個簡單的SQL查詢 -Django模型組通過

SELECT pid, COUNT(*) AS docs FROM xml_table WHERE suid='2' GROUP BY pid; 

我如何得到這個使用Django ORM(即Django模型)。基本上我沒有得到如何做GROUP BY

回答

6

XML_table.objects.filter(suid='2').values('pid').annotate(docs=Count('pid')).order_by()

Docs

1

這個工程非常漂亮。

from collections import defaultdict 
count = defaultdict(int) 
for doc in XML_Table.objects.filter(suid='2'): 
    count[doc.pid] += 1 

這不是SQL。通常它比SQL更快,因爲它不會對大型表或聯結結果進行排序。

+0

我很狡猾的「經常」。任何人要使用這個應該首先測試。我來到這裏是因爲我需要超過一百萬行。你的查詢集將不得不返回全部百萬。另外,你要返回整行並實例化 - 如果你走這條路線,.values()應該快很多。 – 2014-03-28 18:01:57