我经常发现自己想从Django的queryset中获取第一个对象,如果没有,则返回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
另一个 Select 是:
qs = MyModel.objects.filter(blah = blah)
try:
return qs[0]
except IndexError:
return None
这会生成一个数据库调用,这很好.但需要大量时间创建一个异常对象,这是一件非常占用内存的事情,而您真正需要的只是一个微不足道的if测试.
我怎样才能只用一个数据库调用就能做到这一点,而不会用异常对象搅动内存呢?