如果我想检查存在并且如果可能的话检索一个对象,下列哪种方法更快?更惯用吗?为什么?如果不是我列出的两个例子中的任何一个,那么怎么办呢?
if Object.objects.get(**kwargs).exists():
my_object = Object.objects.get(**kwargs)
my_object = Object.objects.filter(**kwargs)
if my_object:
my_object = my_object[0]
如果相关,我会关心mysql和postgres。
答案 0 :(得分:4)
为什么不在try / except块中执行此操作以避免多个查询/查询,然后是if?
try:
obj = Object.objects.get(**kwargs)
except Object.DoesNotExist:
pass
只需在except。下添加你的其他逻辑。
答案 1 :(得分:2)
django对exists
如果还没有评估some_queryset,那么你 知道它会在某个时刻,然后使用some_queryset.exists() 将做更多的整体工作(存在检查的一个查询加上一个 额外的一个以后检索结果)而不是简单地使用 bool(some_queryset),它检索结果然后检查是否 任何人都归还了。
因此,如果您要使用该对象,在检查存在后,文档建议使用它并使用
强制评估1次if my_object:
pass