Метод select_from
Метод select_from класса Select
задает источник данных, который будет
использован в секции FROM итогового
SQL-запроса. Первым параметром метод
принимает таблицу, подзапрос или иную
сущность, от которой нужно строить выборку.
Это полезно, когда колонки выбираются не из
той таблицы, которая определяется
автоматически.
Синтаксис
select_from(fromclause)
Пример
Давайте создадим таблицу articles и
выполним выборку с явным указанием источника:
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),
)
metadata.create_all(engine)
stmt = select(articles.c.id, articles.c.title).select_from(articles)
with engine.connect() as conn:
res = conn.execute(stmt)
print(res.all())
Результат выполнения кода:
[]
Пример
Давайте добавим строки в таблицу и посмотрим итоговый SQL-запрос:
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),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'id': 1, 'title': 'article 1'},
{'id': 2, 'title': 'article 2'},
])
stmt = select(articles.c.title).select_from(articles)
print(stmt)
Итоговый SQL запрос:
SELECT articles.title
FROM articles
Пример
Давайте используем select_from для
явного соединения двух таблиц через
join:
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),
)
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
metadata.create_all(engine)
stmt = select(articles.c.title, users.c.name).select_from(
articles.join(users, articles.c.id == users.c.id)
)
with engine.connect() as conn:
res = conn.execute(stmt)
print(res.all())
Результат выполнения кода:
[]
Смотрите также
-
класс
Select,
который представляет конструктор SELECT-запроса -
метод
join,
который соединяет таблицы в запросе -
метод
where,
который задает условие фильтрации -
метод
select_from,
который задает источник данных для FROM