假设我有一个表People,是否有一种方法可以快速检查是否存在名为'Fred'的People对象?
People
'Fred'
People.objects.filter(Name='Fred')
然后检查返回结果的长度,但是有没有一种更优雅的方法呢?
x8goxv8g1#
正如最近的回答中提到的,从Django 1.2开始,您可以使用exists()方法(链接)。
exists()
不要对结果使用len(),你应该使用People.objects.filter(Name='Fred').count().根据django文档,count()在后台执行SELECT COUNT(*),所以应该始终使用count(),而不是将所有记录加载到Python对象中,然后对结果调用len()(除非无论如何都需要将对象加载到内存中,在这种情况下len()会更快)。来源:Django文档
People.objects.filter(Name='Fred').count()
2mbi3lxu2#
QuerySet API中的exists()方法在since Django 1.2中可用。
hgb9j2n63#
您可以使用count()例如:
count()
如果“名称”列是唯一的,则可以执行以下操作:
try: person = People.objects.get(Name='Fred') except (People.DoesNotExist): # Do something else...
您也可以使用get_object_or_404(),例如:
get_object_or_404()
from django.shortcuts import get_object_or_404 get_object_or_404(People, Name='Fred')
kcrjzv8t4#
从Django 1.2开始你可以在QuerySet上使用.exists(),但是在以前的版本中你可以享受this ticket中描述的非常 * 有效 * 的技巧。
.exists()
tzdcorbm5#
为了明确起见:.exists()是在QuerySet而不是对象上调用的。这是可行的:
>>> User.objects.filter(pk=12).exists() True
这是行不通的:
>>> User.objects.get(pk=12).exists() Traceback (most recent call last): File "<console>", line 1, in <module> AttributeError: 'User' object has no attribute 'exists'
5条答案
按热度按时间x8goxv8g1#
正如最近的回答中提到的,从Django 1.2开始,您可以使用
exists()
方法(链接)。不要对结果使用len(),你应该使用
People.objects.filter(Name='Fred').count()
.根据django文档,count()在后台执行SELECT COUNT(*),所以应该始终使用count(),而不是将所有记录加载到Python对象中,然后对结果调用len()(除非无论如何都需要将对象加载到内存中,在这种情况下len()会更快)。
来源:Django文档
2mbi3lxu2#
QuerySet API中的exists()方法在since Django 1.2中可用。
hgb9j2n63#
您可以使用
count()
例如:如果“名称”列是唯一的,则可以执行以下操作:
您也可以使用
get_object_or_404()
,例如:kcrjzv8t4#
从Django 1.2开始你可以在QuerySet上使用
.exists()
,但是在以前的版本中你可以享受this ticket中描述的非常 * 有效 * 的技巧。tzdcorbm5#
为了明确起见:
.exists()
是在QuerySet而不是对象上调用的。这是可行的:
这是行不通的: