2011-05-10 66 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