带有连接对象的Sql过滤器查询

时间:2015-03-26 23:43:15

标签: python sqlalchemy

所以我有两张桌子:

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 中包含

中特定状态的所有行

这是我到目前为止加入它的原因

query = Foo.query

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

return query

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

1 个答案:

答案 0 :(得分:0)

有很多方法。简单:

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()

Ofc,有更多的方法,你总能找到适合你的需求。