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

Функция tuple_

Функция tuple_ создает SQL-выражение, представляющее кортеж значений. Она принимает произвольное количество позиционных аргументов и формирует из них кортеж для использования в SQL-запросах. Чаще всего применяется вместе с оператором in_ для сравнения составных значений, а также для создания составных первичных ключей и условий сравнения нескольких колонок одновременно.

Синтаксис

tuple_(*args)

Пример

Давайте создадим кортеж из нескольких значений и выведем его SQL-представление:

from sqlalchemy import tuple_ tup = tuple_(1, 2, 3) print(tup)

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

"(1, 2, 3)"

Пример

Давайте используем tuple_ вместе с оператором in_ для сравнения нескольких колонок сразу. Создадим таблицу и выполним запрос:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, tuple_, 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': 'draft'}, {'id': 2, 'title': 'article 2', 'status': 'published'}, {'id': 3, 'title': 'article 3', 'status': 'archived'}, ]) stmt = select(articles).where( tuple_(articles.c.id, articles.c.status).in_([ (1, 'draft'), (3, 'archived'), ]) ) res = conn.execute(stmt).fetchall() print(res)

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

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

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

SELECT articles.id, articles.title, articles.status FROM articles WHERE (articles.id, articles.status) IN ((1, 'draft'), (3, 'archived'))

Пример

Давайте сравним кортеж колонок с одним конкретным значением через оператор равенства:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, tuple_, select engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('num', Integer), ) metadata.create_all(engine) with engine.connect() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'num': 10}, {'id': 2, 'title': 'article 2', 'num': 20}, ]) stmt = select(articles.c.title).where( tuple_(articles.c.id, articles.c.num) == (2, 20) ) res = conn.execute(stmt).fetchall() print(res)

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

[('article 2',)]

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

SELECT articles.title FROM articles WHERE (articles.id, articles.num) = (2, 20)

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

  • функцию any_,
    которая сравнивает значение с любым элементом массива
  • функцию all_,
    которая сравнивает значение со всеми элементами массива
  • функцию between,
    которая проверяет вхождение значения в диапазон
  • функцию bindparam,
    которая создает именованный параметр привязки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить