gpt4 book ai didi

python - Flask-SQLAlchemy:通过一个关系进行多个过滤器

转载 作者:太空狗 更新时间:2023-10-30 00:29:31 26 4
gpt4 key购买 nike

我有两个模型,标签和照片,它们具有如下多对多关系:

tag_identifier = db.Table('tag_identifier',
db.Column('photo_id', db.Integer, db.ForeignKey('photo.id')),
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
)

class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)

class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True)
tags = db.relationship('Tag', secondary=tag_identifier,
backref=db.backref('photos', lazy='dynamic'), lazy='dynamic')

我正在尝试查询具有多个特定标签的所有照片。例如,如果我用 <Tag 1> 查询所有照片 <Tag 2> :


Photo.query.join(Photo.tags).filter(Tag.id==1).all()会回来

[<Photo 1>, <Photo 2>, <Photo 3>, <Photo 4>] , 和

Photo.query.join(Photo.tags).filter(Tag.id==2).all()会回来

[<Photo 1>, <Photo 2>, <Photo 5>, <Photo 6>] .


在此示例中,我需要执行什么操作才能获得以下结果: [<Photo 1>, <Photo 2>]

最佳答案

q = (Photo.query
.filter(Photo.tags.any(Tag.id == 1))
.filter(Photo.tags.any(Tag.id == 2))
)

请注意,您还可以检查名称:

tag1, tag2 = 'tag1', 'tag2'
q = (Photo.query
.filter(Photo.tags.any(Tag.name == tag1))
.filter(Photo.tags.any(Tag.name == tag2))
)

关于python - Flask-SQLAlchemy:通过一个关系进行多个过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31306012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com