Django ORM在mysql/postgres上检查是否存在Django ORM检查是否存在
问题描述:
如果我想检查存在,并且如果可能的话检索一个对象,以下哪种方法更快?更习惯?为什么?如果不是我列出的两个例子中的任何一个,那么还有什么可以做的呢?Django ORM在mysql/postgres上检查是否存在Django ORM检查是否存在
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为此。
答
Django提供的exists
使用您的第一个例子,也可以完成查询两次相当不错的概述,根据documentation:
如果some_queryset尚未评估,但你 知道它会在某个时刻,然后使用some_queryset.exists() 将做更多的全面工作(一个查询存在检查加上一个 多余的一个稍后检索结果)比简单地使用 bool(some_queryset),whic h检索结果,然后检查是否有返回的 。
所以,如果你将要使用的对象,检查所有脑干后,该文档建议只是用它和使用
if my_object:
pass
答
为什么在尝试这样做强制评估1次/除了块以避免多个查询/查询然后一个if?
try:
obj = Object.objects.get(**kwargs)
except Object.DoesNotExist:
pass
只需在except下添加其他逻辑即可。
+0
这比我提到的第二种情况快吗? – zallarak 2013-03-27 23:40:58
感谢您分享此内容。我天真地在我的模型类中编写exists()函数直到这个时间点。我今后要使用内置的东西 – 2013-03-27 21:20:02