Самый быстрый способ получить первый объект из набора запросов в django?

Часто мне хочется получить первый объект из набора запросов в Django или вернуть None , если его нет. Есть много способов сделать это, и все они работают. Но мне интересно, какая из них самая эффективная.

qs = MyModel.objects.filter(blah = blah)
if qs.count() > 0:
    return qs[0]
else:
    return None

Приводит ли это к двум вызовам базы данных? Это кажется расточительным. Это быстрее?

qs = MyModel.objects.filter(blah = blah)
if len(qs) > 0:
    return qs[0]
else:
    return None

Другой вариант:

qs = MyModel.objects.filter(blah = blah)
try:
    return qs[0]
except IndexError:
    return None

Это генерирует единственный вызов базы данных, что хорошо. Но часто требует создания объекта исключения,

Этот небольшой инструмент предназначен для увеличения версии приложения каждый раз, когда Visual Studio собирает его, и я знаю, что существует множество инструментов для этого.

6
задан 25 February 2011 в 23:31
поделиться