Comment puis-je spécifier la colonne que je veux dans ma requête en utilisant un modèle (il sélectionne toutes les colonnes par défaut) ? Je sais comment le faire avec la session sqlalchmey : session.query(self.col1)
mais comment le faire avec des modèles ? Je ne peux pas faire SomeModel.query()
. Y a-t-il un moyen ?
Réponses
Trop de publicités?Vous pouvez utiliser le with_entities()
pour restreindre les colonnes que vous souhaitez renvoyer dans le résultat. ( documentation )
result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)
En fonction de vos besoins, vous pouvez également trouver différés utile. Ils vous permettent de renvoyer l'objet complet mais limitent les colonnes qui passent par le câble.
Vous pouvez utiliser load_only fonction :
from sqlalchemy.orm import load_only
fields = ['name', 'addr', 'phone', 'url']
companies = session.query(SomeModel).options(load_only(*fields)).all()
Vous pouvez utiliser Model.query
parce que le Model
(ou généralement sa classe de base, surtout dans les cas où l'extension déclarative est utilisée) se voit attribuer la classe Sesssion.query_property
. Dans ce cas, le Model.query
est équivalent à Session.query(Model)
.
Je ne connais pas le moyen de modifier les colonnes renvoyées par la requête (sauf en en ajoutant d'autres à l'aide de la fonction add_columns()
).
Votre meilleure chance est donc d'utiliser le Session.query(Model.col1, Model.col2, ...)
(comme l'a déjà montré Salil).
Vous pouvez utiliser Query.values, Query.values
session.query(SomeModel).values('id', 'user')
- Réponses précédentes
- Plus de réponses