Колба SQLAlchemy запрос, укажите имена столбцов


Как указать столбец, который я хочу в моем запросе с помощью модели (он выбирает все столбцы по умолчанию)? Я знаю, как это сделать с помощью сеанса sqlalchmey: session.query(self.col1), но как мне это сделать с моделями? Я не могу сделать SomeModel.query(). Есть ли способ?

5 70

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