构造一个查询,以过滤与给定A实例

时间:2015-08-05 17:32:37

标签: python flask sqlalchemy flask-sqlalchemy

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

1 个答案:

答案 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))

或者,如果需要考虑大量数据的效果,请使用joinfilter

 session.query(TableB).join(TableB.many_to_many).filter(TableA.id == eleA.id)
相关问题