Flask SQLAlchemy查询具有多个所需标记的多对多标记
我定义了以下模型:Flask SQLAlchemy查询具有多个所需标记的多对多标记,flask,sqlalchemy,many-to-many,flask-sqlalchemy,tagging,Flask,Sqlalchemy,Many To Many,Flask Sqlalchemy,Tagging,我定义了以下模型: 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.I
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 controller/view中,我得到了一组输入标记,例如['summer','selfie',…]
问题:
['summ','elfi',…]
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)))
你的解决方案很好。我刚刚用
contains()
替换了startswith()
。非常感谢。