2013-03-27 138 views
0

如果我想检查存在,并且如果可能的话检索一个对象,以下哪种方法更快?更习惯?为什么?如果不是我列出的两个例子中的任何一个,那么还有什么可以做的呢?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为此。

回答

2

Django提供的exists

使用您的第一个例子,也可以完成查询两次相当不错的概述,根据documentation

如果some_queryset尚未评估,但你 知道它会在某个时刻,然后使用some_queryset.exists() 将做更多的全面工作(一个查询存在检查加上一个 多余的一个稍后检索结果)比简单地使用 bool(some_queryset),whic h检索结果,然后检查是否有返回的 。

所以,如果你将要使用的对象,检查所有脑干后,该文档建议只是用它和使用

if my_object: 
    pass 
+0

感谢您分享此内容。我天真地在我的模型类中编写exists()函数直到这个时间点。我今后要使用内置的东西 – 2013-03-27 21:20:02

4

为什么在尝试这样做强制评估1次/除了块以避免多个查询/查询然后一个if?

try: 
    obj = Object.objects.get(**kwargs) 
except Object.DoesNotExist: 
    pass 

只需在except下添加其他逻辑即可。

+0

这比我提到的第二种情况快吗? – zallarak 2013-03-27 23:40:58