Метод match класса ColumnElement
Метод match класса ColumnElement
выполняет полнотекстовый поиск по колонке.
Первым параметром метод принимает строку
поискового запроса. Метод генерирует
SQL-выражение MATCH ... AGAINST,
которое поддерживается СУБД с полнотекстовым
поиском, например MySQL и PostgreSQL.
Для SQLite метод может эмулироваться или
вызывать ошибку в зависимости от диалекта.
Синтаксис
column_element.match(search_string)
Пример
Давайте создадим таблицу и применим метод
match к колонке 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)
stmt = select(articles).where(articles.c.title.match('article'))
print(stmt)
Результат выполнения кода:
"SELECT articles.id, articles.title, articles.text, articles.status, articles.num
FROM articles
WHERE articles.title MATCH :title_1"
Пример
Давайте выполним запрос с методом match
и выведем найденные строки:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, insert
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(insert(articles), [
{'title': 'article one', 'text': 'sql text', 'status': 'active', 'num': 1},
{'title': 'article two', 'text': 'python text', 'status': 'active', 'num': 2},
{'title': 'user note', 'text': 'other text', 'status': 'draft', 'num': 3}
])
conn.commit()
stmt = select(articles.c.title).where(articles.c.title.match('article'))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article one',), ('article two',)]
Пример
Давайте применим метод match к колонке
text и отфильтруем строки по статусу:
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, insert
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(insert(articles), [
{'title': 'article one', 'text': 'sql text', 'status': 'active', 'num': 1},
{'title': 'article two', 'text': 'python text', 'status': 'active', 'num': 2},
{'title': 'user note', 'text': 'sql draft', 'status': 'draft', 'num': 3}
])
conn.commit()
stmt = select(articles.c.title).where(
articles.c.text.match('sql'),
articles.c.status == 'active'
)
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[('article one',)]
Смотрите также
-
класс
ColumnElement,
который представляет элемент колонки -
метод
like,
который выполняет поиск по шаблону -
метод
ilike,
который выполняет регистронезависимый поиск по шаблону -
метод
regexp_match,
который выполняет поиск по регулярному выражению