Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get number of results from Django's raw() query function

I'm using a raw query and i'm having trouble finding out how to get the number of results it returns. Is there a way?

edit

.count() doesnt work. it returns: 'RawQuerySet' object has no attribute 'count'

like image 496
Galen Avatar asked Jun 14 '10 12:06

Galen


3 Answers

You can also cast it first to a list to get the length, like so:

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

This is needed if you want to have the length or even the existence of entries in the RawQuerySet in templates as well. Just precalculate the length like above, and pass it as a parameter to the template.

like image 161
Jason Kotenko Avatar answered Nov 04 '22 23:11

Jason Kotenko


I presume you're talking about the raw() queryset method. That returns a queryset just like any other. So of course you can call .count() on it, just like you would on any other ORM query.

Edit Shows what happens when you don't check. As you note, .raw() returns a RawQuerySet which doesn't have a count method - and neither does it support len(). The only way to get the length is to iterate through the queryset and count them:

sum(1 for result in results)
like image 32
Daniel Roseman Avatar answered Nov 04 '22 22:11

Daniel Roseman


Count Works on RawQuerySet

 

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

like image 38
Tinashe Robert Avatar answered Nov 04 '22 22:11

Tinashe Robert