大家在某些博客都可以看到文章会带上一些标签,标签的作用是对目标进行分类,让浏览博客的人能更快找到自己需要的内容,提高查阅效率。

比如本博客的标签示例:

点击标签就会进入相应的标签目录。

博客文章与标签的关系

正如上面的图片所示,一个文章可以有多个标签,而一个标签下也可以拥有多篇文章,所以很显然,文章与标签是一个多对多的关系。

文章与标签的数据库关系设计

除了文章表与标签表,多对多关系中间还都会有一个关系表,我们用这个表的每一条记录来表示一篇文章与一个标签的关系。

文章与标签的数据库关系的实现

我使用的是基于SQLAlchemy(orm工具)flask_sqlalchemy包,对于设计数据库模型是非常方便的。

首先先写一个关系表

registrations=db.Table('registrations',
    db.Column('post_id',db.Integer,db.ForeignKey('posts.id')),
    db.Column('tag_id',db.Integer,db.ForeignKey('tags.id')))

然后在文章表或标签表中定义关系

class Post(db.Model):
    __tablename__='posts'
    id=db.Column(db.Integer,primary_key=True)
    title=db.Column(db.String(64))
    body=db.Column(db.Text)
    ...
    tags=db.relationship('Tag',
                         secondary=registrations,
                         backref=db.backref('posts',lazy='dynamic'),
                         lazy='dynamic')
class Tag(db.Model):
    __tablename__='tags'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(64),index=True,unique=True)

操作

>>>tag=Tag(name='python')
>>>db.session.add(tag)
>>>post=Post(title='title',body='body'...)
>>>post.tags.append(tag)
>>>db.session.add(post)
>>>db.session.commit()

其他

还可以在post模型中添加一些方法,让操作更加简单,比如将一段由空格分隔的标签集合字符串('python code balabala')转换成一个个tag实例,然后与post建立关系等等。

  • 最新随笔

  • 在AI时代尽可能在行业、学科的宽度上扩展,尽量尝试一些跨学科的事情、阅读一些跨学科的书籍和资料,应该会有很大收益。
  • 跟qoder和deepseek一起把之前想做的一些人生管理系统整合到博客上了,感觉还不错,顺便让它们帮我弄了一个数据大屏,放在平板上实时播放也不错。本来想单独做成独立的系统,想想感觉徒增维护成本,那就干脆合并到博客了。也能增加自己打开博客的频率,增加输出内容的概率。
  • 改了下首页的顶部banner,加了个背景图,新旧对比
  • 让qodercli改了改博客,这速度效率真的史无前例地高,连commit和push都交给它了。效果和claudeCode有的一比,用了一段时间,真的还可以。
  • 海洋公园逛逛(ps:北极熊馆动物状态都感觉不太好)
  • 半夜梦到一段诗,但醒来不太记得全部,让deepseek续写一下,我只记得前面是: “当元论状赵金海,不出凭栏***” 至于为什么会突然起来记下这段诗,是空调水一直滴在琴上,给我吵醒了(惊醒!),深圳台风刚过,湿度大
  • 渐变
  • 周末打开摩尔庄园给拉姆喂点吃的,碰到个大佬带着同服的一群人去一大堆以前的老场景逛嘞。对我来说,印象最深刻的是浆果丛林刚开放的那段时间。