Resumo : neste tutorial, você aprenderá como consultar dados usando base na correspondência de padrões no Django, que é equivalente ao LIKE
operador.
Usaremos os Employee
modelos do aplicativo de RH para a demonstração. O Employee
modelo é mapeado para a hr_employee
tabela 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 LIKE
operador 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 Je
e são seguidas por zero ou mais caracteres.
Para consultar dados do Django usando o LIKE
operador, você usa o startswith
anexando-o ao nome de um campo:
field_name__startswith
Linguagem 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 Je
maiú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, __istartswith
usa a versão maiúscula do valor para correspondência.
termina com e termina com
O endswith
e iendswith
retorna True se um valor terminar com uma substring. O endswith
é equivalente ao seguinte LIKE
operador:
LIKE '%substring'
Linguagem de código: Python ( python )
Por exemplo, o seguinte usa o endswith
para 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 contains
permite verificar se uma string contém uma substring. É equivalente ao seguinte LIKE
operador:
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 icontains
para 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_name começar com uma substring. |
field_name__istartswith='substring' |
UPPER(field_name) LIKE UPPER('%substring') |
retornar True se field_name começ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_name terminar com uma substring. |
field_name__iendswith='substring' |
UPPER(field_name) LIKE UPPER('substring%') |
retornar True se field_name terminar com uma substring sem distinção entre maiúsculas e minúsculas |
field_name__contains='substring' |
field_name LIKE '%substring%' |
retorne True se field_name contiver uma substring. |
field_name__icontains='substring' |
UPPER(field_name) LIKE UPPER('%substring%') |
retorne True se field_name contiver uma substring sem distinção entre maiúsculas e minúsculas. |