Метод ilike класса ColumnElement
Метод ilike класса ColumnElement создает
SQL-выражение для регистронезависимого поиска строк
по шаблону. Первым параметром метод принимает шаблон
поиска в виде строки. Вторым необязательным параметром
можно передать символ экранирования escape.
Метод возвращает объект BinaryExpression, который
можно использовать в условиях where и filter.
Синтаксис
ColumnElement.ilike(other, escape=None)
Пример
Давайте создадим таблицу articles и выполним регистронезависимый поиск по полю title:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'Article One', 'text': 'text 1', 'status': 'draft', 'num': 1},
{'title': 'article two', 'text': 'text 2', 'status': 'published', 'num': 2},
{'title': 'ARTICLE THREE', 'text': 'text 3', 'status': 'draft', 'num': 3}
])
stmt = select(articles.c.title).where(articles.c.title.ilike('article%'))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('Article One',), ('article two',), ('ARTICLE THREE',)]
Пример
Давайте выполним регистронезависимый поиск
с подстановочным знаком _ для одного символа:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'text 1', 'status': 'draft', 'num': 1},
{'title': 'article 2', 'text': 'text 2', 'status': 'published', 'num': 2},
{'title': 'article 10', 'text': 'text 3', 'status': 'draft', 'num': 3}
])
stmt = select(articles.c.title).where(articles.c.title.ilike('article _'))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article 1',), ('article 2',)]
Пример
Давайте выполним регистронезависимый поиск по полю text с использованием условия OR:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, or_
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'Hello World', 'status': 'draft', 'num': 1},
{'title': 'article 2', 'text': 'hello sqlalchemy', 'status': 'published', 'num': 2},
{'title': 'article 3', 'text': 'HELLO PYTHON', 'status': 'draft', 'num': 3}
])
stmt = select(articles.c.title).where(
or_(
articles.c.text.ilike('hello%'),
articles.c.text.ilike('%world')
)
)
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article 1',), ('article 2',), ('article 3',)]
Пример
Давайте посмотрим итоговый SQL-запрос,
который генерирует метод ilike:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select
engine = create_engine('sqlite:///:memory:')
metadata = MetaData()
articles = Table(
'articles', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String),
Column('status', String),
Column('num', Integer)
)
stmt = select(articles.c.title).where(articles.c.title.ilike('article%'))
print(stmt)
Итоговый SQL запрос:
SELECT articles.title
FROM articles
WHERE articles.title ILIKE 'article%'
Смотрите также
-
класс
ColumnElement,
который представляет базовый элемент столбца -
метод
like,
который выполняет регистрозависимый поиск по шаблону -
метод
notilike,
который выполняет регистронезависимый поиск с отрицанием -
метод
contains,
который проверяет содержание подстроки