python 对于Django模型,是否有查看记录是否存在的快捷方式?

vxf3dgd4  于 2022-12-21  发布在  Python
关注(0)|答案(5)|浏览(158)

假设我有一个表People,是否有一种方法可以快速检查是否存在名为'Fred'People对象?

People.objects.filter(Name='Fred')

然后检查返回结果的长度,但是有没有一种更优雅的方法呢?

x8goxv8g

x8goxv8g1#

    • 更新**:

正如最近的回答中提到的,从Django 1.2开始,您可以使用exists()方法(链接)。

    • 原始答复:**

不要对结果使用len(),你应该使用People.objects.filter(Name='Fred').count().根据django文档,
count()在后台执行SELECT COUNT(*),所以应该始终使用count(),而不是将所有记录加载到Python对象中,然后对结果调用len()(除非无论如何都需要将对象加载到内存中,在这种情况下len()会更快)。
来源:Django文档

2mbi3lxu

2mbi3lxu2#

QuerySet API中的exists()方法在since Django 1.2中可用。

hgb9j2n6

hgb9j2n63#

您可以使用count()例如:

People.objects.filter(Name='Fred').count()

如果“名称”列是唯一的,则可以执行以下操作:

try:
  person = People.objects.get(Name='Fred')
except (People.DoesNotExist):
  # Do something else...

您也可以使用get_object_or_404(),例如:

from django.shortcuts import get_object_or_404
get_object_or_404(People, Name='Fred')
kcrjzv8t

kcrjzv8t4#

从Django 1.2开始你可以在QuerySet上使用.exists(),但是在以前的版本中你可以享受this ticket中描述的非常 * 有效 * 的技巧。

tzdcorbm

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'

相关问题