Sql 使用连接对象过滤查询

Sql filter query with join objects

所以我有两个表:

Foo:
Foo_no | Bar_no | props1 | props2
(Relationship in the model)
Bar_no = db.Column(db.Integer, db.ForeignKey('bar.Bar_no'))
bar = db.relationship('Bar', foreign_keys=Bar_no)

Bar:
Bar_no | status | props3 | props4

我正在尝试使用 sqlalchemy 进行查询以查找 Foo 中包含 Bar[= 中特定状态的任何行13=]

这是我到目前为止加入的内容

query = Foo.query

if 'status' in filters:
    query.join(Bar)
    query = query.filter(Foo.bar.status == filters['status'])

return query

我不太确定如何创建查询以从这两个表中筛选出 Foo 具有的正确状态。

有很多方法。简单:

Foo.query.join(Bar).filter_by(Bar.status == filters['status']).all()

更明确:

Foo.query.join(Bar, Foo.bar_no == Bar.bar_no).filter(Bar.status == filters['status']).all()

加入条件:

Foo.query.join(Bar, and_(Foo.bar_no == Bar.bar_no, Bar.status == filters['status'])).all()

通过会话,如果您只需要结果中选定的列列表:

db.session.query(Foo.Foo_no, Foo.props1).join(Bar, Foo.bar_no == Bar.bar_no).filter(Bar.status == filters['status']).all()

当然,还有很多方法,您总能找到适合您需要的方法。