我经常发现自己想从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
这会生成一个数据库调用,这很好。但是在很多时候都需要创建一个异常对象,当您真正需要的只是一个微不足道的if-test时,这是一件非常耗费内存的事情。
我怎样才能只用一个数据库调用就能做到这一点,而不会用异常对象搅动内存呢?
https://stackoverflow.com/questions/5123839
复制相似问题