# Flask-SQLAlchemy:多对多 过滤条件
多对多关系如下:(例子)
parent_to_children = db.Table('parent_to_children',
db.Column('parent_id', db.Integer, db.ForeignKey('parent.id')),
db.Column('children_id', db.Integer, db.ForeignKey('children.id'))
)
class Children(db.Model):
id = db.Column(db.Integer, primary_key=True)
class Parent(db.Model):
id = db.Column(db.Integer, primary_key=True)
childrens = db.relationship('Children', secondary=parent_to_children,
backref=db.backref('parents', lazy='dynamic'), lazy='dynamic')
# 根据子条件过滤获取父数据
根据 Children 的 id 多少来返回 Parent 的数据
Parent.query.join(Parent.childrens).filter(Children.id==1).all()
当 Children 有多个条件的时候
q = (Parent.query
.filter(Parent.childrens.any(Children.id == 1))
.filter(Parent.childrens.any(Children.name == 'test'))
)
# 根据父数据过滤子数据
先获取一条父数据
parent = Parent.query.first()
这时候我们可以用 parent.childrens 获取该父数据下所有的子数据,但这时候我们会需要过滤子数据我们可以,如下:
children = parent.childrens.filter(Children.id == 1)
就跟平时的条件过滤是一样的
← 2019-11-15 2019-11-21 →