Comment spécifier la colonne souhaitée dans ma requête à l'aide d'un modèle (toutes les colonnes sont sélectionnées par défaut)? Je sais comment faire cela avec la session sqlalchmey: session.query(self.col1)
, mais comment puis-je le faire avec des modèles? Je ne peux pas faire SomeModel.query()
. Y a-t-il un moyen?
Vous pouvez utiliser la méthode with_entities()
pour limiter les colonnes à renvoyer dans le résultat. ( documentation )
result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)
Selon vos besoins, vous pouvez également trouver différé utile. Ils vous permettent de renvoyer l'objet complet mais limitent les colonnes qui passent par le fil.
session.query.with_entities(SomeModel.col1)
est le même que
session.query(SomeModel.col1)
pour alias, nous pouvons utiliser .label ()
session.query(SomeModel.col1.label('some alias name'))
Vous pouvez utiliser la fonction load_only :
from sqlalchemy.orm import load_only
fields = ['name', 'addr', 'phone', 'url']
companies = session.query(Company).options(load_only(*fields)).all()
où 'Société' est votre modèle (dans votre cas, il s'agit de SomeModel)
Vous pouvez utiliser Model.query
, Car le Model
(ou généralement sa classe de base, en particulier dans les cas où l'extension déclarative est utilisée) est attribué Sesssion.query_property
. Dans ce cas, le Model.query
Équivaut à Session.query(Model)
.
Je ne suis pas au courant de la façon de modifier les colonnes renvoyées par la requête (sauf en ajoutant davantage en utilisant add_columns()
).
Votre meilleure solution consiste donc à utiliser la Session.query(Model.col1, Model.col2, ...)
(comme l'a déjà montré Salil).