10
votes

Obtenir le nombre de résultats de la fonction de requête RAW () de Django

J'utilise une requête crue et j'ai du mal à trouver comment obtenir le nombre de résultats qu'il revient. Y a-t-il un moyen?

Modifier

.Count () ne fonctionne pas. Il renvoie: l'objet 'rawqueryset' n'a aucun attribut 'Nombre'


1 commentaires

Malheureusement: "wontfix": code.djangoproject.com/ticket/32058


3 Réponses :


12
votes

Je présume que vous parlez de la méthode brut () QuerySet. Qui retourne un queryset comme tout autre. Donc, bien sûr, vous pouvez appeler .Count () dessus, comme vous le feriez sur une autre requête Orm.

EDIT montre ce qui se passe lorsque vous Ne vérifie pas. Comme vous le souhaitez, .raw () retourne un rawqueryset qui n'a pas de méthode de comptage - et il ne prend en charge pas non plus len () . Le seul moyen d'obtenir la longueur est de itérer à travers le querySet et comptez-les: xxx


3 commentaires

J'ai essayé cela. Je reçois: "RawquerySet 'Object n'a aucun attribut' Compte '


Je pensais qu'il n'y avait pas une méthode. Merci beaucoup.


Cela force la requête à évaluer non?



16
votes

Vous pouvez également la jeter d'abord à une liste pour obtenir la longueur, comme:

results = ModelName.objects.raw("select * from modelnames_modelname")
len(list(results))  #returns length


2 commentaires

Cela force la requête à évaluer non? Si vous ne voulez que le compte, cela coûte cher.


Comme @ @ SK9 a dit: Ceci est beaucoup cher.



2
votes

Count fonctionne sur RawQuerySet

 

ModelName.objects.raw("select 1 as id , COUNT(*) from modelnames_modelname")


0 commentaires