2011-05-10 4 views
2

J'ai cette simple requête SQL -Django Groupe Modèles Par

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

Comment puis-je obtenir cela en utilisant Django ORM (modèles à savoir django). Fondamentalement, je ne comprends pas comment faire GROUP BY?

Répondre

6

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

Docs

1

Cela fonctionne très bien.

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

Ce n'est pas SQL. Souvent, il est plus rapide que SQL car il n'impose pas de tri sur une grande table ou un résultat de jointure.

+0

Je chipote avec "souvent". Toute personne sur le point d'utiliser cela devrait d'abord tester. Je suis venu ici parce que j'ai besoin de compter pour plus d'un million de lignes. Votre requête devrait renvoyer tous les millions. De plus, vous renvoyez la ligne entière et l'instanciez - un .values ​​() devrait être beaucoup plus rapide si vous suivez cette route. –