Метод with_only_columns
Метод with_only_columns класса Select заменяет
список столбцов, которые выбираются в запросе. Он принимает
произвольное количество столбцов или сущностей и возвращает
новый объект Select с обновленным списком колонок.
Метод удобен, когда нужно переопределить набор выбираемых
полей, не создавая запрос заново.
Синтаксис
select.with_only_columns(*entities)
Пример
Давайте создадим запрос, который выбирает все столбцы
из таблицы articles, а затем заменим их только
на столбец title:
from sqlalchemy import create_engine, select, Table, Column, Integer, String, MetaData
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)
stmt = stmt.with_only_columns(articles.c.title)
print(stmt)
Результат выполнения кода:
"SELECT articles.title FROM articles"
Пример
Давайте заменим список столбцов на два конкретных
столбца id и title:
from sqlalchemy import create_engine, select, Table, Column, Integer, String, MetaData
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.text)
stmt = stmt.with_only_columns(articles.c.id, articles.c.title)
print(stmt)
Результат выполнения кода:
"SELECT articles.id, articles.title FROM articles"
Пример
Давайте выполним запрос с заменой столбцов и получим результат из базы данных:
from sqlalchemy import create_engine, select, Table, Column, Integer, String, MetaData
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),
)
metadata.create_all(engine)
with engine.connect() as conn:
conn.execute(articles.insert(), [
{'title': 'article 1', 'text': 'text 1', 'status': 'active', 'num': 1},
{'title': 'article 2', 'text': 'text 2', 'status': 'draft', 'num': 2},
])
conn.commit()
stmt = select(articles)
stmt = stmt.with_only_columns(articles.c.title)
with engine.connect() as conn:
res = conn.execute(stmt)
print(res.fetchall())
Результат выполнения кода:
[('article 1',), ('article 2',)]
Смотрите также
-
класс
Select,
который представляет SELECT-запрос -
метод
add_columns,
который добавляет столбцы к запросу -
метод
reduce_columns,
который удаляет дублирующиеся столбцы -
метод
with_for_update,
который добавляет блокировку строк