183 votes

Requête Flask SQLAlchemy, spécifier les noms des colonnes

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 ?

296voto

David McKeone Points 3193

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.

94voto

Salil Points 3517
session.query().with_entities(SomeModel.col1)

est la même chose que

session.query(SomeModel.col1)

pour les alias, nous pouvons utiliser .label()

session.query(SomeModel.col1.label('some alias name'))

69voto

Vlad Bezden Points 5024

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()

11voto

van Points 18052

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).

5voto

gaozhidf Points 773

Vous pouvez utiliser Query.values, Query.values

session.query(SomeModel).values('id', 'user')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X