del*_*ser 5 python sqlalchemy flask flask-sqlalchemy
我有两个模型,标签和照片,有这样的多对多关系:
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')
Run Code Online (Sandbox Code Playgroud)
我正在尝试查询具有多个特定标签的所有照片.例如,如果我要使用<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>]
van*_*van 13
q = (Photo.query
.filter(Photo.tags.any(Tag.id == 1))
.filter(Photo.tags.any(Tag.id == 2))
)
Run Code Online (Sandbox Code Playgroud)
请注意,您还可以检查名称:
tag1, tag2 = 'tag1', 'tag2'
q = (Photo.query
.filter(Photo.tags.any(Tag.name == tag1))
.filter(Photo.tags.any(Tag.name == tag2))
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10312 次 |
| 最近记录: |