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

Метод union_all класса Select

Метод union_all класса Select объединяет результаты текущего запроса с результатами другого запроса или запросов. В отличие от метода union, метод union_all сохраняет все строки, включая дубликаты. Первым параметром метод принимает другой объект Select или несколько запросов. Метод возвращает новый объект CompoundSelect, который можно выполнить через сессию или соединение.

Синтаксис

select_stmt.union_all(other_select, *others)

Пример

Давайте создадим две таблицы и объединим их запросы методом union_all:

from sqlalchemy import create_engine, select, union_all, table, column, Integer, String engine = create_engine('sqlite:///:memory:') articles = table( 'articles', column('id', Integer), column('title', String), ) users = table( 'users', column('id', Integer), column('title', String), ) stmt1 = select(articles.c.id, articles.c.title) stmt2 = select(users.c.id, users.c.title) res = union_all(stmt1, stmt2) print(res)

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

"SELECT articles.id, articles.title FROM articles UNION ALL SELECT users.id, users.title FROM users"

Пример

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

from sqlalchemy import create_engine, select, union_all, table, column, Integer, String engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(table( 'articles', column('id', Integer), column('title', String), ).create()) conn.execute(table( 'users', column('id', Integer), column('title', String), ).create()) conn.execute( table( 'articles', column('id', Integer), column('title', String), ).insert(), [{'id': 1, 'title': 'article'}, {'id': 2, 'title': 'article'}], ) conn.execute( table( 'users', column('id', Integer), column('title', String), ).insert(), [{'id': 1, 'title': 'user'}, {'id': 2, 'title': 'user'}], ) articles = table( 'articles', column('id', Integer), column('title', String), ) users = table( 'users', column('id', Integer), column('title', String), ) stmt1 = select(articles.c.title) stmt2 = select(users.c.title) res = conn.execute(union_all(stmt1, stmt2)).fetchall() print(res)

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

[('article',), ('article',), ('user',), ('user',)]

Пример

Давайте сравним union_all и union на одинаковых данных с дубликатами:

from sqlalchemy import create_engine, select, union, union_all, table, column, Integer, String engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(table( 'articles', column('id', Integer), column('title', String), ).create()) conn.execute( table( 'articles', column('id', Integer), column('title', String), ).insert(), [{'id': 1, 'title': 'article'}, {'id': 2, 'title': 'article'}], ) articles = table( 'articles', column('id', Integer), column('title', String), ) stmt1 = select(articles.c.title).where(articles.c.id == 1) stmt2 = select(articles.c.title).where(articles.c.id == 2) res_all = conn.execute(union_all(stmt1, stmt2)).fetchall() res_uniq = conn.execute(union(stmt1, stmt2)).fetchall() print('union_all:', res_all) print('union:', res_uniq)

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

union_all: [('article',), ('article',)] union: [('article',)]

Пример

Давайте применим сортировку к объединенному запросу через метод order_by:

from sqlalchemy import create_engine, select, union_all, table, column, Integer, String engine = create_engine('sqlite:///:memory:') with engine.connect() as conn: conn.execute(table( 'articles', column('id', Integer), column('title', String), ).create()) conn.execute(table( 'users', column('id', Integer), column('title', String), ).create()) conn.execute( table( 'articles', column('id', Integer), column('title', String), ).insert(), [{'id': 1, 'title': 'article'}, {'id': 2, 'title': 'article'}], ) conn.execute( table( 'users', column('id', Integer), column('title', String), ).insert(), [{'id': 1, 'title': 'user'}, {'id': 2, 'title': 'user'}], ) articles = table( 'articles', column('id', Integer), column('title', String), ) users = table( 'users', column('id', Integer), column('title', String), ) stmt1 = select(articles.c.title) stmt2 = select(users.c.title) res = conn.execute( union_all(stmt1, stmt2).order_by('title') ).fetchall() print(res)

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

[('article',), ('article',), ('user',), ('user',)]

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

  • метод union,
    который объединяет запросы без дубликатов
  • класс Select,
    который представляет SELECT-запрос
  • метод order_by,
    который сортирует результаты запроса
  • метод where,
    который фильтрует строки запроса
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить