Galen
Galen

Reputation: 30170

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'

Upvotes: 10

Views: 12106

Answers (3)

Tinashe Robert
Tinashe Robert

Reputation: 711

Count Works on RawQuerySet

 

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

Upvotes: 2

Jason Kotenko
Jason Kotenko

Reputation: 251

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.

Upvotes: 17

Daniel Roseman
Daniel Roseman

Reputation: 599876

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)

Upvotes: 12

Related Questions