РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
489 of 711 menu

Метод bool_op

Метод bool_op класса ColumnElement создает булево выражение, применяя к колонке произвольный SQL-оператор. Первым параметром метод принимает строку с именем оператора, а вторым - значение, с которым сравнивается колонка. В отличие от метода op, метод bool_op автоматически оборачивает результат в логическое выражение, пригодное для использования в where, having и других условиях фильтрации.

Синтаксис

ColumnElement.bool_op(opstring, *other)

Пример

Давайте создадим таблицу и применим метод bool_op для сравнения колонки с оператором IS DISTINCT FROM:

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('status', String), ) metadata.create_all(engine) stmt = select(articles.c.title).where( articles.c.status.bool_op('IS DISTINCT FROM')('article') ) print(stmt)

Итоговый SQL запрос:

SELECT articles.title FROM articles WHERE articles.status IS DISTINCT FROM ?

Пример

Давайте выполним запрос с методом bool_op на реальных данных и посмотрим результат:

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('status', String), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'status': 'article'}, {'id': 2, 'title': 'article 2', 'status': 'user'}, {'id': 3, 'title': 'article 3', 'status': 'sqlite'}, ]) conn.commit() stmt = select(articles.c.title).where( articles.c.status.bool_op('IS DISTINCT FROM')('article') ) res = conn.execute(stmt).scalars().all() print(res)

Результат выполнения кода:

['article 2', 'article 3']

Пример

Давайте применим метод bool_op с оператором 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('status', String), ) metadata.create_all(engine) stmt = select(articles.c.title).where( articles.c.title.bool_op('ILIKE')('%article%') ) print(stmt)

Итоговый SQL запрос:

SELECT articles.title FROM articles WHERE articles.title ILIKE ?

Смотрите также

  • класс ColumnElement,
    который представляет базовый элемент колонки
  • метод op,
    который создает произвольный оператор без булева контекста
  • метод like,
    который выполняет поиск по шаблону
  • метод in_,
    который проверяет вхождение в набор значений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить