构造一个查询以过滤与给定 A 实例相关的所有 B 实例的多对多

Construct a query to filter many-to-many for all B instances related to a given A instance

我想获取与特定 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))
)

使用关系的 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)