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

Функция or_

Функция or_ создает выражение SQL, которое объединяет переданные условия через логический оператор OR. Функция принимает произвольное количество позиционных аргументов, каждый из которых является условием или логическим выражением. Возвращается объект BooleanClauseList, пригодный для использования в методах where, filter и having.

Синтаксис

or_(*clauses)

Пример

Давайте создадим таблицу статей и выберем записи, у которых заголовок равен 'article' или статус равен 'published':

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('status', String), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'status': 'published'}, {'id': 2, 'title': 'sqlite', 'status': 'draft'}, {'id': 3, 'title': 'article', 'status': 'draft'}, ]) stmt = select(articles.c.id, articles.c.title).where( or_(articles.c.title == 'article', articles.c.status == 'published') ) with engine.connect() as conn: res = conn.execute(stmt).fetchall() print(res)

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

[(1, 'article'), (3, 'article')]

Пример

Функция or_ может объединять три и более условий. Выберем статьи, у которых заголовок равен 'article', или статус равен 'published', или идентификатор равен 2:

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('status', String), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'status': 'published'}, {'id': 2, 'title': 'sqlite', 'status': 'draft'}, {'id': 3, 'title': 'article', 'status': 'draft'}, ]) stmt = select(articles.c.id).where( or_( articles.c.title == 'article', articles.c.status == 'published', articles.c.id == 2, ) ) with engine.connect() as conn: res = conn.execute(stmt).fetchall() print(res)

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

[(1,), (2,), (3,)]

Пример

Функцию or_ удобно комбинировать с функцией and_ для построения сложных логических выражений. Выберем статьи, у которых заголовок равен 'article', и при этом статус равен 'published' или 'draft':

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, or_, and_ 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.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'status': 'published'}, {'id': 2, 'title': 'sqlite', 'status': 'draft'}, {'id': 3, 'title': 'article', 'status': 'draft'}, ]) stmt = select(articles.c.id).where( and_( articles.c.title == 'article', or_(articles.c.status == 'published', articles.c.status == 'draft'), ) ) with engine.connect() as conn: res = conn.execute(stmt).fetchall() print(res)

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

[(1,), (3,)]

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

SELECT articles.id FROM articles WHERE articles.title = 'article' AND (articles.status = 'published' OR articles.status = 'draft')

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

  • функцию and_,
    которая объединяет условия через логическое И
  • функцию not_,
    которая инвертирует логическое выражение
  • функцию text,
    которая создает текстовое SQL-выражение
  • функцию bindparam,
    которая создает именованный параметр привязки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить