博客与标签是多对多关系
一共三张表
标签表、博客表、以及中间表
# 标签表 #
class Tags(db.Model):
__tablename__ = "tags"
id = db.Column(db.Integer, primary_key=True) # id号
name = db.Column(db.String(128)) # 标签名字
create_time = db.Column(db.DateTime, default=datetime.now)
# 博客标签中间表
class BlogTags(db.Model):
__tablename__ = 'blog_tags'
id = db.Column(db.Integer, primary_key=True) # id号
tag_id = db.Column(db.Integer, db.ForeignKey("tags.id"), nullable=False) # 联系到用户
blog_id = db.Column(db.Integer, db.ForeignKey("blog.id"), nullable=False) # 联系到帖子
create_time = db.Column(db.DateTime, default=datetime.now) # 点赞时间
# 社区博客
class Blog(db.Model):
__tablename__ = "blog"
id = db.Column(db.Integer, primary_key=True) # 帖子id
tags = db.relationship("Tags", secondary="blog_tags", backref="blogs")
title = db.Column(db.String(32), nullable=False) # 帖子标题
text = db.Column(db.TEXT, nullable=False) # 帖子内容
likes = db.Column(db.Integer, nullable=False, default=0) # 点赞数
正常可以通过某个标签获取该标签下的所有博客
tag = Tags.query.get(1)
blogs = tag.blogs
也可以通过某个博客获取该博客下的所有标签
blog = Blog.query.get(1)
tags = blog.tags
如果我想获取某些标签下的博客并且还行对筛选出来的博客进行某种关系排序怎么做呢?
比如我想获取某些标签下的博客,并且对博客进行点赞数倒叙排序
那么可以输入下面的代码
blog_list = Blog.query.filter(Blog.tags).filter(Tags.name.in_([tags])).order_by(desc("likes"))
打印出来的sql语句是
SELECT blog.id AS blog_id, blog.title AS blog_title, blog.text AS blog_text, blog.likes AS blog_likes
FROM blog, blog_tags AS blog_tags_1, tags
WHERE blog.id = blog_tags_1.blog_id AND tags.id = blog_tags_1.tag_id AND tags.name IN (%(name_1)s) ORDER BY blog.likes DESC
可以满足我们的要求
本文由 菜鸡音宫 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
原文链接:https://www.hicaiji.com/archives/flask-sqlalchemy-duoduiduo-search
最后更新:2020-11-12 22:38:04
Update your browser to view this website correctly. Update my browser now