["python","django","performance","object","django-models"]
Fastest way to get the first object from a queryset in django?

Often I find myself wanting to get the first object from a queryset in Django, or return None if there aren't any. There are lots of ways to do this which all work. But I'm wondering which is the most performant. qs = MyModel.objects.filter(blah = blah) if qs.count() > 0: return qs[0] else: return None Does this result in two database calls? That seems wasteful. Is this any faster? qs = MyModel.objects.filter(blah = blah) if len(qs) > 0: return qs[0] else: return None Another option would be: qs = MyModel.objects.filter(blah = blah) try: return qs[0] except IndexError: return None This generates a single database call, which is good. But requires creating an exception object a lot of the time, which is a very memory-intensive thing to do when all you really need is a trivial if-test. How can I do this with just a single database call and without churning memory with exception objects?
Django 1.6 (released Nov 2013) introduced the convenience methods first() and last() which swallow the resulting exception and return None if the queryset returns no objects.