1

モデルXとモデルYがあります。

Yには、X.idへの外部キー参照が含まれ、プロパティxで使用可能な関連するXエントリのインスタンスが含まれます。

x_id = Column(Integer, ForeignKey('xtable.id'))    
x = relationship('X')

Xにはブールプロパティ'publish'もあります。

Yでクエリを実行すると、x.publishがTrueの結果にフィルターをかけるにはどうすればよいですか。

私はこのようなことをしようとしました:

DBSession.query(Y).filter_by(x.publish = True).all() 

しかし、これは機能しません。キーワードを式にできないというエラーが表示されます。解決策についてSQLalchemyのドキュメントを調べましたが、探しているものが見つからないようです。助言がありますか?

4

2 に答える 2

3

joinクエリにを追加して、次の代わりにX使用する必要があります。filterfilter_by

qry = DBSession.query(Y)
qry = qry.join(X)
qry = qry.filter(X.publish == True)
qry.all()

または一度に:

DBSession.query(Y).join(X).filter(X.publish == True).all()

との違いについては、この質問を参照しfilterてくださいfilter_by

于 2011-10-09T17:26:55.817 に答える
3

他のオプションは

あなたは直接の新しい関係を作成することができます

好き

x1 = relationship(X,
             primaryjoin='and_(X.id==Y.x_id, X.publish==True)'
             )

これは自動的に参加します。

于 2011-10-10T10:25:42.593 に答える