モデルを使用してクエリに必要な列を指定するにはどうすればよいですか(デフォルトではすべての列が選択されます)?sqlalchmeyセッションでこれを行う方法を知っていますが、session.query(self.col1)
モデルでどのように行うのですか?できないよSomeModel.query()
。方法はありますか?
モデルを使用してクエリに必要な列を指定するにはどうすればよいですか(デフォルトではすべての列が選択されます)?sqlalchmeyセッションでこれを行う方法を知っていますが、session.query(self.col1)
モデルでどのように行うのですか?できないよSomeModel.query()
。方法はありますか?
回答:
with_entities()
メソッドを使用して、結果で返す列を制限できます。(ドキュメント)
result = SomeModel.query.with_entities(SomeModel.col1, SomeModel.col2)
要件によっては、遅延オブジェクトが役立つ場合もあります。それらはあなたが完全なオブジェクトを返すことを可能にしますが、ワイヤーを介して来る列を制限します。
ID
両方のテーブルにあるJOINと競合フィールドを使用しているため
.label()
stackoverflow.com/a/11535992/248616を
session.query().with_entities(SomeModel.col1)
と同じです
session.query(SomeModel.col1)
エイリアスには.label()を使用できます
session.query(SomeModel.col1.label('some alias name'))
session.query().with_entities(SomeModel.col1)
from sqlalchemy.orm import load_only
fields = ['name', 'addr', 'phone', 'url']
companies = session.query(SomeModel).options(load_only(*fields)).all()
.first()
およびとまったく同じタイプのオブジェクトを返します.one()
(これは遅延/熱心なロードフィールドとリレーションになります)-クエリコンポーネントとして設定できます
with_entities
受け入れられた回答で与えられたとおりに使用し、クエリはそのフィールドのみを選択しました
を使用できるのはModel.query
、Model
(または通常はその基本クラス、特に宣言型拡張機能が使用されている場合)が割り当てられているためSesssion.query_property
です。この場合、Model.query
はと同等Session.query(Model)
です。
クエリによって返された列を変更する方法を知りません(を使用してさらに追加する場合を除くadd_columns()
)。
だからあなたのベストショットはSession.query(Model.col1, Model.col2, ...)
(すでにサリルが示したように)を使うことです。
Query.values、Query.valuesを使用できます
session.query(SomeModel).values('id', 'user')
ここの例:
movies = Movie.query.filter(Movie.rating != 0).order_by(desc(Movie.rating)).all()
評価<> 0の映画のデータベースをクエリし、最初に最も高い評価で評価するように注文します。
ここを見てください:Flask-SQLAlchemyでの選択、挿入、削除