构造一个查询以过滤与给定 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))
或者,如果需要考虑大量数据的性能,请使用 join
和 filter
。
session.query(TableB).join(TableB.many_to_many).filter(TableA.id == eleA.id)
我想获取与特定 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))
或者,如果需要考虑大量数据的性能,请使用 join
和 filter
。
session.query(TableB).join(TableB.many_to_many).filter(TableA.id == eleA.id)