2013-03-27 183 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