Метод regexp_replace
Метод regexp_replace класса ColumnElement
создает SQL-выражение для замены подстроки,
соответствующей регулярному выражению. Первым
параметром метод принимает шаблон регулярного
выражения, вторым - строку замены. Дополнительно
можно передать флаги сопоставления.
Синтаксис
ColumnElement.regexp_replace(pattern, replacement, [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': 'article two'},
])
res = conn.execute(
select(articles.c.title.regexp_replace('article', 'post'))
)
print(res.fetchall())
Результат выполнения кода:
[('post one',), ('post two',)]
Пример
Давайте выполним замену с использованием групп захвата в регулярном выражении:
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 2024'},
])
res = conn.execute(
select(articles.c.title.regexp_replace('(\\d+)', 'year-\\1'))
)
print(res.fetchall())
Результат выполнения кода:
[('article year-2024',)]
Пример
Давайте применим метод к строковому литералу напрямую:
from sqlalchemy import literal
expr = literal('user name').regexp_replace('\\s+', '_')
print(expr)
Результат выполнения кода:
"regexp_replace(:param_1, :param_2, :param_3)"
Итоговый SQL запрос:
SELECT regexp_replace(?, ?, ?) AS regexp_replace_1
Смотрите также
-
класс
ColumnElement,
который представляет элемент SQL-выражения -
метод
regexp_match,
который выполняет поиск по регулярному выражению -
метод
like,
который выполняет поиск по шаблону -
метод
concat,
который объединяет строки