我已经定义了模型:
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('photo_id', db.Integer, db.ForeignKey('photo.id')),
)
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True)
sha1sum = db.Column(db.LargeBinary(20), unique=True)
...
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('photos', lazy='dynamic'))
在flask控制器/视图中,我获得了一些输入标签,例如['summer', 'selfie', ...]
。
问题:
['summ', 'elfi', ...]
?答案 0 :(得分:5)
可能不是最效率(如果你有很多要搜索的标签),但是可读组合查询的方式:
input_tags = ['selfie', 'summer']
q = db.session.query(Photo)
for tag in input_tags:
q = q.filter(Photo.tags.any(Tag.name == tag))
不完整使用startswith(..)
代替==
:
input_tags = ['sum', 'fu']
q = db.session.query(Photo)
for tag in input_tags:
q = q.filter(Photo.tags.any(Tag.name.startswith(tag)))