python - 从 django 的查询集中获取第一个对象的最快方法?

标签 python django performance django-models

我经常发现自己想从 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 测试时,这是一件非常耗费内存的事情。

我怎样才能只用一个数据库调用而不用异常对象搅动内存?

最佳答案

Django 1.6 (released Nov 2013)介绍了convenience methods first()last() 吞下产生的异常并在查询集没有返回任何对象时返回 None

关于python - 从 django 的查询集中获取第一个对象的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123839/

相关文章:

使用 Django jquery ajax 文件上传

python - 如何在滚动时保持小部件在 View 中?

python wsgi :ssl-error Can't connect to HTTPS URL because the SSL module is not available

forms.FileField() 中的 Django 错误

MySQL:使用插入和更新而不是插入重复键更新是否更快?

python - Scikit-learn 不适用于 KNN 上的字符串值

javascript - 如何修复 ajax 调用以便隐藏我的 token ?

django - 表单未显示 ValidationError

.net - WCF ConcurrencyMode.Multiple连接最佳实践和缓存

php - 拥有基于特定设计的庞大数据库(用于性能测试)