Метод alias класса Select
Метод alias класса Select создает объект псевдонима,
который представляет выборку как отдельную таблицу.
Это позволяет использовать подзапрос в других запросах,
обращаясь к его колонкам через атрибуты псевдонима.
Первым параметром метод принимает имя псевдонима,
вторым - флаг flat, который влияет на поведение
при генерации SQL.
Синтаксис
select_stmt.alias(name, [flat])
Пример
Давайте создадим псевдоним для простой выборки
из таблицы articles:
from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String
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)
)
stmt = select(articles.c.id, articles.c.title).alias('a')
print(stmt)
Результат выполнения кода:
"SELECT articles.id AS id, articles.title AS title \nFROM articles AS a"
Пример
Давайте используем псевдоним в качестве источника данных для основного запроса:
from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String
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)
)
subq = select(articles.c.id, articles.c.title).alias('sub')
stmt = select(subq.c.id, subq.c.title)
with engine.connect() as conn:
conn.execute(articles.insert().values(id=1, title='article', status='active', num=1))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article')]
Пример
Давайте применим псевдоним вместе с условием where:
from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String
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)
)
subq = select(articles.c.id, articles.c.title, articles.c.status).alias('sub')
stmt = select(subq.c.id, subq.c.title).where(subq.c.status == 'active')
with engine.connect() as conn:
conn.execute(articles.insert().values(id=1, title='article', status='active', num=1))
conn.execute(articles.insert().values(id=2, title='user', status='draft', num=2))
res = conn.execute(stmt).fetchall()
print(res)
Результат выполнения кода:
[(1, 'article')]
Смотрите также
-
класс
Select,
который представляет SELECT-запрос -
метод
subquery,
который создает подзапрос из выборки -
метод
cte,
который создает общее табличное выражение -
метод
select_from,
который задает источник данных для запроса