2017-01-31 1 views
1

フィルタ内の結合テーブルを参照する方法を探しています。私のクエリは:sqlalchemy as new_nameフィルタnew_name.column ==値

session.query(A).outerjoin(B, C, D).filter(B.column_b == 1, C.column_c == 2) 

モデルBとCの名前を付けずにこのようなフィルタリングを行うにはどうすればよいですか?

session.query(A).outerjoin(B, C, D).filter_by(column_b=1, column_c=2) 

filter_byは「COLUMN_B」とD.エイリアス(の「column_c」)とエイリアスを見つけようとするので(動作しない)も動作しません。
field_to_valueのdictをフォーム{"column_a": 0, "column_b": 1, "column_c": 2}で受け取っています。それから質問を作成する必要があります。もちろん、私は{"column_a": A.column_b, "column_b": B.column_b, "column_c": C.column_c}のようなマッピングを持つことができます。しかし、より良い方法があるはずです。

このようなフィルタリングを行う良い方法はありますか?

答えて

0

filter_byは最後の結合に適用されるため、外部結合を解除する必要があります。試してください:

session.query(A).outerjoin(B).filter_by(column_b == 1) 
       .outerjoin(C).filter_by(column_c == 2) 
       .outerjoin(D) 
+0

お返事ありがとうございます。しかし、このアプローチは、モデル列の名前が属することをまだ知っていることを示しています。より具体的な質問を私が達成したいものに更新しました。 – simpleranchero

関連する問題