Flask-Sqlalchemy many-to-many 关系查询问题
数据库ORM定义如下
TagsMap = db.Table('tagsmap',
db.Column('tag_id', db.Integer, db.ForeignKey('tags.id')),
db.Column('material_id', db.Integer, db.ForeignKey('materials.id'))
)
class Materials(db.Model):
__tablename__ = 'materials'
id = db.Column(db.Integer,primary_key=True)
createtime = db.Column(db.DateTime())
filename = db.Column(db.Text(30))
category = db.Column(db.String(10))
dir = db.Column(db.String(20))
tags = db.relationship('Tags',secondary=TagsMap,
backref = db.backref('materials', lazy='dynamic'),lazy="dynamic")
def __init__(self,createtime,filename,category,dir):
self.createtime = createtime
self.filename = filename
self.category = category
self.dir = dir
def __repr__(self):
return 'filename %s of category %s ' % (self.filename, self.category)
class Tags(db.Model):
__tablename__ = 'tags'
id = db.Column(db.Integer,primary_key=True)
tagparent = db.Column(db.String(20))
tagname = db.Column(db.String(20))
#material = db.relationship('Materials',secondary=TagsMap,
# backref = db.backref('tags',lazy="dynamic"),lazy="dynamic")
def __init__(self,tagparent,tagname):
self.tagparent = tagparent
self.tagname = tagname
def __repr__(self):
return '%s ' % (self.tagname,)
问题说明:
其实数据模型就是最常见的POSTS对TAGS模型了,只是这里POSTS变成了Materials。
需要帮助的地方是,比如说我一个Materials(假如说'菜篮子1')里头可能有三个Tags,分别为‘西红柿’,‘香蕉’,‘苹果’。
现在我从前端页面获取到了‘西红柿’和'香蕉'这两个post参数,在后台进行数据库查询时怎么进行操作才能获取到‘菜篮子1’这个materials。
而现在我的查询代码如下
results = Materials.query.filter(Materials.tags.any(Tags.tagname.in_([valuelist[0],valuelist[1]]))).all()
in_这个过滤器只能属于查询是否在两个选项之中,我需要的是某个tags属性包含了这两个选项的materials的。
不知道问题是否描述清楚,提前感谢你的帮助~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
目前自己是这样dirty hack的
先查出tags包含‘西红柿’的materials,然后查出tags包含‘香蕉’的materials,然后对这两个materials做并集。。就获取出tags里同事包含‘西红柿’和‘香蕉’的materials了