python - 从 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

这会生成单个数据库调用,这很好。但是需要在很多时候创建一个异常对象,当您真正需要的只是一个微不足道的 if 测试时,这是一件非常耗费内存的事情。

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

最佳答案

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

https://stackoverflow.com/questions/5123839/

相关文章:

python - 如何在 Python 中直接获取字典键作为变量(而不是通过从值中搜索)?

c - 写入 .txt 文件?

python - 如果在 Python 中为 None,是否有返回默认值的简写?

python - 如何编写符合 PEP8 的超长字符串并防止 E501

linux - 将主机端口转发到 docker 容器

linux - 了解 Linux/proc/pid/maps 或/proc/self/maps

mysql - 有没有办法只安装mysql客户端(Linux)?

c - 使用 gcc 命令行从 .c 文件构建 .so 文件

python - 在python中将一个列表插入另一个列表的语法是什么?

python - 在 Pandas 中将 float 转换为整数?