Django GOSTAR

Resumo : neste tutorial, você aprenderá como consultar dados usando base na correspondência de padrões no Django, que é equivalente ao LIKEoperador.

Usaremos os Employeemodelos do aplicativo de RH para a demonstração. O Employeemodelo é mapeado para a hr_employeetabela no banco de dados:

começa com e começa com

Às vezes, você deseja verificar se uma string começa com uma substring. Por exemplo, você pode querer encontrar funcionários cujo primeiro nome comece com Je.

Para fazer isso em SQL, você usa o LIKEoperador assim:

SELECT * 
FROM hr_employee
WHERE first_name LIKE 'Je%';Linguagem de código:  Python  ( python )

O %é um curinga que corresponde a qualquer número de caracteres. E 'Je%'corresponde às strings que começam com Jee são seguidas por zero ou mais caracteres.

Para consultar dados do Django usando o LIKEoperador, você usa o startswithanexando-o ao nome de um campo:

field_name__startswithLinguagem de código:  Python  ( python )

Por exemplo, o seguinte usa o filter()método para localizar funcionários cujos nomes começam com Je:

>>> Employee.objects.filter(first_name__startswith='Je') 
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 'Je%'
 LIMIT 21
Execution time: 0.000998s [Database: default]
<QuerySet [<Employee: Jennifer Thompson>, <Employee: Jerry Cunningham>, <Employee: Jesus Reilly>, <Employee: Jessica Lewis>, <Employee: Jeanette Hendrix>, <Employee: Jeffrey Castro>, <Employee: Jessica Jackson>, <Employee: Jennifer Bender>, <Employee: Jennifer Moyer>]>Linguagem de código:  Python  ( python )

Se quiser encontrar funcionários cujos nomes comecem sem distinção entre Jemaiúsculas e minúsculas, você pode usar istartswith:

>>> Employee.objects.filter(first_name__istartswith='je') 
SELECT "hr_employee"."id",
       "hr_employee"."first_name",
       "hr_employee"."last_name",
       "hr_employee"."contact_id",
       "hr_employee"."department_id"
  FROM "hr_employee"
 WHERE UPPER("hr_employee"."first_name"::text) LIKE UPPER('je%')
 LIMIT 21
Execution time: 0.001398s [Database: default]
<QuerySet [<Employee: Jennifer Thompson>, <Employee: Jerry Cunningham>, <Employee: Jesus Reilly>, <Employee: Jessica Lewis>, <Employee: Jeanette Hendrix>, <Employee: Jeffrey Castro>, <Employee: Jessica Jackson>, <Employee: Jennifer Bender>, <Employee: Jennifer Moyer>]>Linguagem de código:  Python  ( python )

Nesse caso, __istartswithusa a versão maiúscula do valor para correspondência.

termina com e termina com

O endswithe iendswithretorna True se um valor terminar com uma substring. O endswithé equivalente ao seguinte LIKEoperador:

LIKE '%substring'Linguagem de código:  Python  ( python )

Por exemplo, o seguinte usa o endswithpara localizar funcionários cujos nomes terminam com er:

>>> Employee.objects.filter(first_name__endswith='er')           
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 '%er'
 LIMIT 21
Execution time: 0.000999s [Database: default]
<QuerySet [<Employee: Jennifer Thompson>, <Employee: Tyler Briggs>, <Employee: Spencer Riggs>, <Employee: Roger Robinson>, <Employee: Hunter Boyd>, <Employee: Amber Brown>, <Employee: Tyler Coleman>, <Employee: Jennifer Bender>, <Employee: Jennifer Moyer>]>Linguagem de código:  Python  ( python )

Ele retorna os funcionários com os primeiros nomes Jennifer, Tyler, Spencer, Roger, etc.

Esta iendswithé a versão que não diferencia maiúsculas de minúsculas do endswith. Por exemplo:

>>> Employee.objects.filter(first_name__iendswith='ER') 
SELECT "hr_employee"."id",
       "hr_employee"."first_name",
       "hr_employee"."last_name",
       "hr_employee"."contact_id",
       "hr_employee"."department_id"
  FROM "hr_employee"
 WHERE UPPER("hr_employee"."first_name"::text) LIKE UPPER('%ER')
 LIMIT 21
Execution time: 0.000999s [Database: default]
<QuerySet [<Employee: Jennifer Thompson>, <Employee: Tyler Briggs>, <Employee: Spencer Riggs>, <Employee: Roger Robinson>, <Employee: Hunter Boyd>, <Employee: Amber Brown>, <Employee: Tyler Coleman>, <Employee: Jennifer Bender>, <Employee: Jennifer Moyer>]>Linguagem de código:  Python  ( python )

contém e icontém

O containspermite verificar se uma string contém uma substring. É equivalente ao seguinte LIKEoperador:

LIKE '%substring%'Linguagem de código:  Python  ( python )

Por exemplo, o seguinte comando localiza os funcionários cujo primeiro nome contém a substring ff:

>>> Employee.objects.filter(first_name__contains='ff')  
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 '%ff%'
 LIMIT 21
Execution time: 0.001293s [Database: default]
<QuerySet [<Employee: Tiffany Jackson>, <Employee: Tiffany Holt>, <Employee: Jeffrey Castro>]>Linguagem de código:  Python  ( python )

A consulta retorna os funcionários com os primeiros nomes Tiffany e Jeffrey.

Esta icontainsé a versão que não diferencia maiúsculas de minúsculas do contains. Portanto, você pode usar o icontainspara verificar se uma string contém uma substring sem distinção entre maiúsculas e minúsculas:

>>> Employee.objects.filter(first_name__icontains='ff') 
SELECT "hr_employee"."id",
       "hr_employee"."first_name",
       "hr_employee"."last_name",
       "hr_employee"."contact_id",
       "hr_employee"."department_id"
  FROM "hr_employee"
 WHERE UPPER("hr_employee"."first_name"::text) LIKE UPPER('%ff%')
 LIMIT 21
Execution time: 0.002012s [Database: default]
<QuerySet [<Employee: Tiffany Jackson>, <Employee: Tiffany Holt>, <Employee: Jeffrey Castro>]>Linguagem de código:  Python  ( python )

Resumo

Django SQL COMO Significado
field_name__startswith='substring' field_name LIKE '%substring' retorne True se field_namecomeçar com uma substring.
field_name__istartswith='substring' UPPER(field_name) LIKE UPPER('%substring') retornar True se field_namecomeçar com uma substring sem distinção entre maiúsculas e minúsculas
field_name__endswith='substring' field_name LIKE 'substring%' retorne True se field_nameterminar com uma substring.
field_name__iendswith='substring' UPPER(field_name) LIKE UPPER('substring%') retornar True se field_nameterminar com uma substring sem distinção entre maiúsculas e minúsculas
field_name__contains='substring' field_name LIKE '%substring%' retorne True se field_namecontiver uma substring.
field_name__icontains='substring' UPPER(field_name) LIKE UPPER('%substring%') retorne True se field_namecontiver uma substring sem distinção entre maiúsculas e minúsculas.

Deixe um comentário

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