Django existe

Resumo : neste tutorial, você aprenderá como usar o QuerySet exists()método Django para verificar se a QuerySetcontém alguma linha.

Introdução ao método Django QuerySet existe()

Às vezes, você deseja verificar se uma consulta contém alguma linha. Para fazer isso, você usa o exists()método do QuerySetobjeto.

O exists()método retorna Truese QuerySetcontiver alguma linha ou Falsenão.

Nos bastidores, exists()tentará realizar a consulta da maneira mais rápida possível. No entanto, a consulta será quase idêntica a uma QuerySetconsulta normal.

Suponha que você tenha um QuerySete queira verificar se ele possui algum objeto. Em vez de fazer isso:

if query_set:
   print('the queryset has at least one object')Linguagem de código:  Python  ( python )

…você deveria usar o exists()porque é um pouco mais rápido:

if query_set.exists():
   print('the queryset has at least one object')Linguagem de código:  Python  ( python )

Django 4.1 adicionou o que é uma versão assíncrona do .aexists()exists()

Exemplo do método Django exist()

Usaremos o Employeemodelo para a demonstração. O Employeemodelo é mapeado para a hr_employeetabela no banco de dados:

Primeiro, execute o shell_pluscomando:

python manage.py shell_plusLinguagem de código:  texto simples  ( texto simples )

Em segundo lugar, encontre os funcionários cujos nomes começam com a letra J:

>>> Employee.objects.filter(first_name__startswith='J').exists()
SELECT 1 AS "a"
  FROM "hr_employee"
 WHERE "hr_employee"."first_name"::text LIKE 'J%'
 LIMIT 1
Execution time: 0.000000s [Database: default]
TrueLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Observe que o Django gerou o SQL baseado no PostgreSQL. Se você usar outros bancos de dados, poderá ver uma instrução SQL ligeiramente diferente.

Neste exemplo, o exists()método retorna True. Ele seleciona apenas a primeira linha para determinar se QuerySetcontém alguma linha.

Se você não usar o exists()método, QuerySetobterá todas as linhas da hr_employeetabela:

>>> qs = Employee.objects.filter(first_name__startswith='J') 
>>> print(qs.query)
SELECT "hr_employee"."id",
       "hr_employee"."first_name",
       "hr_employee"."last_name",
       "hr_employee"."contact_id",
       "hr_employee"."department_id"
FROM "hr_employee"
WHERE "hr_employee"."first_name"::text LIKE J%
ORDER BY "hr_employee"."first_name" ASC,
         "hr_employee"."last_name" ASCLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use o método Django exists()para verificar se a QuerySetcontém alguma linha.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *