web-dev-qa-db-ja.com

Flask SQLAlchemyクエリ、列名を指定

モデルを使用してクエリで必要な列を指定するにはどうすればよいですか(デフォルトですべての列を選択します)?私はsqlalchmeyセッションでこれを行う方法を知っています:session.query(self.col1)が、モデルでどのように行うのですか? SomeModel.query()できません。方法はありますか?

90
Matthew Scragg

with_entities()メソッドを使用して、結果で返す列を制限できます。 ( ドキュメント

result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)

要件に応じて、 deferreds が役立つこともあります。完全なオブジェクトを返すことができますが、ワイヤ上にある列を制限します。

171
David McKeone
session.query.with_entities(SomeModel.col1)

と同じです

session.query(SomeModel.col1)

エイリアスには、.label()を使用できます

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

load_only 関数を使用できます:

from sqlalchemy.orm import load_only

fields = ['name', 'addr', 'phone', 'url']
companies = session.query(Company).options(load_only(*fields)).all()

ここで、「会社」はモデルです(あなたの場合はSomeModelです)

22
Vlad Bezden

Model.queryを使用できます。これは、Model(または、特に宣言型拡張機能が使用される場合は通常その基本クラス)が Sesssion.query_property に割り当てられているためです。この場合、Model.querySession.query(Model)と同等です。

クエリによって返された列を変更する方法を知りません( add_columns() を使用してさらに追加する場合を除く)。
したがって、あなたのベストショットはSession.query(Model.col1, Model.col2, ...)を使用することです(すでにSalilが示しています)。

10
van