【问题标题】:Construct a query to filter many-to-many for all B instances related to a given A instance构造一个查询以过滤与给定 A 实例相关的所有 B 实例的多对多
【发布时间】:2015-08-05 17:32:36
【问题描述】:

我想获取与特定TableA 实例相关的所有TableB 实例。这是一个多对多的关系。我该如何构造这个查询?

class TableA(db.Model):
    __tablename__ = 'tableA'
    id = db.Column(db.Integer, primary_key=True)

class TableB(db.Model):
    __tablename__ = 'tableB'
    id = db.Column(db.Integer, primary_key=True)
    many_to_many = db.relationship(TableA, secondary='association_table')

association_table = db.Table('association',
    db.Column('tableA_id', db.Integer, db.ForeignKey(TableA.id)),
    db.Column('tableB_id', db.Integer, db.ForeignKey(TableB.id))
)

【问题讨论】:

    标签: python flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    使用关系的contains 方法过滤与TableA 项相关的TableB 项。

    session.query(TableB).filter(TableB.many_to_many.contains(eleA))
    

    或者使用any对关系执行更复杂的过滤。

    # for example, all B's related to A's with id < 10
    session.query(TableB).filter(TableB.many_to_many.any(TableA.id < 10))
    

    或者,如果对大量数据的性能有顾虑,请使用 joinfilter

     session.query(TableB).join(TableB.many_to_many).filter(TableA.id == eleA.id)
    

    【讨论】:

      猜你喜欢
      • 2016-09-16
      • 2017-09-11
      • 1970-01-01
      • 2016-07-27
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      相关资源
      最近更新 更多