Метод regexp_match
Метод regexp_match класса ColumnElement
создает SQL-выражение для проверки соответствия
значения столбца регулярному выражению. Первым
параметром метод принимает строку с шаблоном
регулярного выражения. Вторым необязательным
параметром можно передать флаги сопоставления.
Метод возвращает объект бинарного выражения,
который можно использовать в условиях выборки.
Синтаксис
ColumnElement.regexp_match(pattern, [flags])
Пример
Давайте создадим таблицу 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),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article one'},
{'id': 2, 'title': 'user two'},
{'id': 3, 'title': 'article three'},
])
stmt = select(articles.c.id, articles.c.title).where(
articles.c.title.regexp_match('^article')
)
for row in conn.execute(stmt):
print(row)
Результат выполнения кода:
(1, 'article one')
(3, 'article three')
Пример
Давайте используем флаги сопоставления, например
флаг i для регистронезависимого поиска:
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),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'Article one'},
{'id': 2, 'title': 'user two'},
{'id': 3, 'title': 'ARTICLE three'},
])
stmt = select(articles.c.id, articles.c.title).where(
articles.c.title.regexp_match('^article', 'i')
)
for row in conn.execute(stmt):
print(row)
Результат выполнения кода:
(1, 'Article one')
(3, 'ARTICLE three')
Пример
Давайте посмотрим на итоговый SQL-запрос,
который генерирует метод regexp_match:
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),
)
stmt = select(articles.c.id).where(
articles.c.title.regexp_match('^article')
)
print(stmt)
Итоговый SQL запрос:
SELECT articles.id
FROM articles
WHERE articles.title REGEXP ?
Смотрите также
-
класс
ColumnElement,
который представляет базовый элемент столбца -
метод
regexp_replace,
который заменяет подстроки по регулярному выражению -
метод
match,
который выполняет полнотекстовый поиск -
метод
like,
который ищет по шаблону с подстановочными знаками