从django中的queryset获取第一个对象的最快方法?

我经常发现自己想要从Django中的queryset中获取第一个对象,或者如果没有,则返回None。有很多方法都可以做到这一点。但我想知道哪一个是最有效的

qs=MyModel.objects.filter(blah=blah)
如果qs.count()>0:
返回qs[0]
其他:
一无所获

这会导致两个数据库调用吗?这似乎是浪费。这快一点吗

qs=MyModel.objects.filter(blah=blah)
如果长度(qs)>0:
返回qs[0]
其他:
一无所获

另一种选择是:

qs=MyModel.objects.filter(blah=blah)
尝试:
返回qs[0]
除索引器外:
一无所获

这将生成一个数据库调用,这很好。但需要大量时间创建一个异常对象,当您真正需要的只是一个微不足道的if测试时,这是一件非常占用内存的事情

我如何做到这一点,只需一个数据库调用,而不使用异常对象搅动内存

使用方便的方法.first().last()

MyModel.objects.filter(blah=blah.first())

如果queryset不返回任何对象,它们都会吞并结果异常并返回None

这些都是在2013年11月发布的Django 1.6中添加的

发表评论