我想获取与特定TableB
实例相关的所有TableA
个实例。这是一种多对多的关系。如何构建此查询?
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))
)
答案 0 :(得分:0)
使用关系的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)