Flask框架从入门到精通之模型关系(十七)

栏目: Python · 发布时间: 5年前

内容简介:在数据库中,我们知道数据关系大概有如下几种:一对一、一对多、多对多、自关联等。我们模型已经描述过了一对多,那么下面我们在用模型把其它关系也写出来。欢迎关注我的公众号:

在数据库中,我们知道数据关系大概有如下几种:一对一、一对多、多对多、自关联等。我们模型已经描述过了一对多,那么下面我们在用模型把其它关系也写出来。

关系

  • 一对一模型 案例:一篇文章只对应一个内容
# 文章模型
class Article(db.Model):
    # 表名
    __tablename__ = 'tbl_article'

    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    title = db.Column(db.String(128), unique=True)  # 名字
    
    # 方便查找,数据并不存在的字段
    content = db.relationship('Acontent', backref='article', uselist=False) #一对一需要把uselist设置为False


# 内容模型
class Acontent(db.Model):
    # 表名
    __tablename__ = 'tbl_acontent'

    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    content = db.Column(db.Text(4000))  # 名字
    article_id = db.Column(db.Integer, db.ForeignKey('tbl_article.id'))
复制代码

tbl_article

id title
1 Flask入门
2 Flask模型

tbl_acontent

id content article_id
1 Flask是轻量级框架 1
2 Flask是模型入门 2
  • 一对多模型 案例:一个分类下有很多文章
# 分类模型
class Category(db.Model):
    # 表名
    __tablename__ = 'tbl_category'

    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(32), unique=True)  # 名字
    # 方便查找,数据并不存在的字段
    article = db.relationship('Article', backref='category')


# 文章模型
class Article(db.Model):
    # 表名
    __tablename__ = 'tbl_article'

    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    title = db.Column(db.String(128), unique=True)  # 名字
    category_id = db.Column(db.Integer, db.ForeignKey('tbl_category.id'))  # 分类id
    # 方便查找,数据并不存在的字段
    content = db.relationship('Acontent', backref='article', uselist=False)  # 一对一需要把uselist设置为False
复制代码

tbl_category

id name
1 框架
2 模型

tbl_article

id title category_id
1 Flask是轻量级框架 1
2 Flask是模型入门 2
3 Flask是模型查询 2
  • 多对多模型 案例:一个标签对应很多文章,一篇文章也对应很多标签
# 辅助表
tbl_tags = db.Table('tbl_tags',
                db.Column('tag_id', db.Integer, db.ForeignKey('tbl_tag.id')),
                db.Column('article_id', db.Integer, db.ForeignKey('tbl_article.id'))
                )

# 标签模型
class Tag(db.Model):
    # 表名
    __tablename__ = 'tbl_tag'

    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.String(32), unique=True)  # 名字


# 文章模型
class Article(db.Model):
    # 表名
    __tablename__ = 'tbl_article'

    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    title = db.Column(db.String(128), unique=True)  # 名字
    category_id = db.Column(db.Integer, db.ForeignKey('tbl_category.id'))  # 分类id
    # 方便查找,数据并不存在的字段
    content = db.relationship('Acontent', backref='article', uselist=False)  # 一对一需要把uselist设置为False
    tags = db.relationship('Tag', secondary=tbl_tags, backref='articles')
复制代码

tbl_tag

id name
1 python
2 后端
3 mysql

tbl_article

id title category_id
1 Flask是轻量级框架 1
2 Flask是模型入门 2
3 Flask是模型查询 2

tbl_tags

tag_id article_id
1 1
1 1
2 1
2 2
  • 自关联模型 案例:地区
# 地区模型
class Area(db.Model):
    # 表名
    __tablename__ = "tbl_area"
    # 数据库真正存在的字段
    id = db.Column(db.Integer, primary_key=True)  # 主键
    name = db.Column(db.Text, nullable=False)  # 地区名字
    parent_id = db.Column(db.Integer, db.ForeignKey("tbl_area.id"))  # 父评论id

    # 方便查找,数据并不存在的字段
    parent = db.relationship("Area", remote_side=[id])  # 自关联需要加remote_side

复制代码
id name parent_id
1 北京市 Null
2 黑龙江 Null
3 哈尔滨 2
4 南岗区 3
5 北京市 1
6 朝阳区 5

欢迎关注我的公众号:

Flask框架从入门到精通之模型关系(十七)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux多线程服务端编程

Linux多线程服务端编程

陈硕 / 电子工业出版社 / 2013-1-15 / 89.00元

本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能网络程序最成熟的模式,掌握之后可顺利地开发各类常见的服务端网络应用程序。本书以muduo 网络库为例,讲解这种编程模型的使用方法及注意事项。 本......一起来看看 《Linux多线程服务端编程》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具