python+flask开发属于自己的个人轻量级web服务网站(九)

数据库部分之多表关系映射

前一节主要实现的是一对多的关系映射,有些时候需要我们实现的是多对多的关系表,应当如何实现呢?


8.png

比如文章和所属标签就是多对多的关系,一个标签可以对应多篇文章,而一篇文章也可以对应多个标签。

在sql语句中建立多对多关系:

create table article{
id:int primary autoincrement;#id:int型,主键,自增
title:varchar,not null #可变字符串,不可为空
}

create table tag{
id:int primary autoincrement;#id:int型,主键,自增
tagname:varchar,nitnull#tagname:可变字符串,不可为空
}

create table article_tag{
tag_id:int primary autoincrement;#id:int型,主键,自增
articel_id:int primary autoincrement;#id:int型,主键,自增
primary key('tag_id','articel_id')
foreign key "article_id" reference "article.id"
foreign key "tag_id" reference "tag.id"
}

在flask中实现数据库表的多对多设计:

class Article(db.Model):
    __tablename__ = 'article'
    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    title = db.Column(db.String(100),nullable=False)
    content = db.Column(db.text,nullable=False)

class Tag(db.Model):
    __tablename__ = 'tag'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    tag = db.Column(db.String,nullable=False)

article_tag = db.Table('article_tag',
                       db.Column('article_id',db.Integer,db.ForeignKey('article.id'),primary_key=True),
                        db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'),primary_key=True)
                       )

db.create_all()

你可能感兴趣的:(python+flask开发属于自己的个人轻量级web服务网站(九))