Колба SQLAlchemy запрос, укажите имена столбцов
Как указать столбец, который я хочу в моем запросе с помощью модели (он выбирает все столбцы по умолчанию)? Я знаю, как это сделать с помощью сеанса sqlalchmey: session.query(self.col1)
, но как мне это сделать с моделями? Я не могу сделать SomeModel.query()
. Есть ли способ?
5 ответов:
можно использовать
with_entities()
метод, чтобы ограничить, какие столбцы вы хотели бы вернуть в результате. (документация)result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)
в зависимости от ваших потребностей, вы также можете найти deferreds полезное. Они позволяют вернуть полный объект, но ограничивают столбцы, которые приходят по проводу.
session.query.with_entities(SomeModel.col1)
это то же самое, что
session.query(SomeModel.col1)
псевдоним, мы можем использовать .label ()
session.query(SomeModel.col1.label('some alias name'))
можно использовать load_only:
from sqlalchemy.orm import load_only fields = ['name', 'addr', 'phone', 'url'] companies = session.query(Company).options(load_only(*fields)).all()
где "компания" - это ваша модель (в вашем случае это SomeModel)
можно использовать
Model.query
, потому чтоModel
(или обычно его базовый класс, особенно в случаях, когда используется декларативное расширение) присваиваетсяSesssion.query_property
. В этом случаеModel.query
эквивалентноSession.query(Model)
.Я не знаю, как изменить столбцы, возвращаемые запросом (за исключением добавления большего количества с помощью
add_columns()
).
Так что ваш лучший выстрел, чтобы использоватьSession.query(Model.col1, Model.col2, ...)
(как уже показал Салил).
пример:
movies = Movie.query.filter(Movie.rating != 0).order_by(desc(Movie.rating)).all()
я запрашиваю БД для фильмов с рейтингом 0, а затем я заказываю их по рейтингу с самым высоким рейтингом в первую очередь.
посмотри здесь: Select, Insert, Delete in Flask-SQLAlchemy