【问题标题】:Sql filter query with join objects带有连接对象的 Sql 过滤器查询
【发布时间】:2015-03-27 16:19:16
【问题描述】:

所以我有两张桌子:

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

中特定状态的任何行

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

query = Foo.query

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

return query

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

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    有很多方法。简单:

    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,还有更多方法,您总能找到适合您需求的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2023-01-24
      • 2014-09-09
      • 1970-01-01
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 2016-09-05
      相关资源
      最近更新 更多