flask框架从入门到精通之模型关系(十七)(代码片段)

小_源 小_源     2022-12-03     271

关键词:

知识点:
1、模型关系参照

一、概况

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

关系

  • 一对一模型
    案例:一篇文章只对应一个内容

# 文章模型
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
idtitle
1Flask入门
2Flask模型
tbl_acontent
idcontentarticle_id
1Flask是轻量级框架1
2Flask是模型入门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
idname
1框架
2模型
tbl_article
idtitlecategory_id
1Flask是轻量级框架1
2Flask是模型入门2
3Flask是模型查询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
idname
1python
2后端
3mysql
tbl_article
idtitlecategory_id
1Flask是轻量级框架1
2Flask是模型入门2
3Flask是模型查询2
tbl_tags
tag_idarticle_id
11
11
21
22
  • 自关联模型
    案例:地区
# 地区模型
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

idnameparent_id
1北京市Null
2黑龙江Null
3哈尔滨2
4南岗区3
5北京市1
6朝阳区5

flask框架从入门到精通之模型创建与添加(代码片段)

知识点:1、模型类创建2、模型类关系3、模型数据添加一、概况在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示。在准备把数据写入数据库前,要先将数据添加到会话中然后... 查看详情

flask框架从入门到精通之模型迁移操作(十六)(代码片段)

知识点:1、模型迁移一、概况在Django框架开发过程中,我们对数据库字段添加或删除,直接修改模型类,然后进行迁移可以了,非常方便。我们也想让Flask框架支持这样的操作,就需要使用Flask-Migrate扩展&#... 查看详情

flask框架从入门到精通之模型查询(十三)(代码片段)

知识点:1、模型查询一、查询其实我们对模型的主要操作就是查询,在Flask-SQLAlchemy中,支持了很多的查询方法。查询操作是通过query对象操作数据。最基本的查询是返回表中所有数据,可以通过过滤器进行更精确... 查看详情

flask框架从入门到精通之模型数据库配置(代码片段)

...配置2、字段选项3、约束字段4、关系选择一、概况在Django框架中内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库。如果想在Flask中也达到这样效果,需要安装一个第三方来支持。SQLAlchemy是一个... 查看详情

flask框架从入门到精通之模型更新与删除(十四)(代码片段)

知识点1、模型数据更新2、模型数据删除一、概况我们前两章实现了对模型类的添加和查询,在开发过程中,查询是比较重要的一个环节。接下来我们要学习的就是对模型的更新和删除。二、更新第一种hero=Hero.query.get(... 查看详情

flask从入门到精通之模型定义

  模型这个术语表示程序使用的持久化实体。在ORM中,模型一般是一个Python类,类中的属性对应数据库表中的列。  Flask-SQLAlchemy创建的数据库实例为模型提供了一个基类以及一系列辅助类和辅助函数,可用于定义模型的结... 查看详情

flask框架从入门到精通之扩展脚本(十五)(代码片段)

一、概况通过使用Flask-Script扩展,我们可以在Flask服务器启动的时候,通过命令行的方式传入参数。而不仅仅通过app.run()方法中传参,比如我们可以通过pythonscript_flask.pyrunserver--hostip地址,告诉服务器在哪个网络接... 查看详情

flask框架从入门到精通之异常处理(代码片段)

知识点:1、abort()函数2、自定义状态码一、概况我们在写视图函数时,会对前端传递过来的参数进行校验,如果校验不过,会给前端返回一些特定的异常信息。在Flask中,abort()函数可以立即终止视图函数的执... 查看详情

flask框架从入门到精通之session(代码片段)

知识点:1、Session一、概况上一篇,我们说到cookie,除了cookie外还有一个叫session的机制。session也是可以存储一些信息的。对于一些敏感、重要的信息,我们可以存储到session中。谁也不希望自己的余额、银行卡密... 查看详情

flask框架从入门到精通之蓝图(二十四)(代码片段)

知识点:1、蓝图一、概况从前面的知识点能看出来,我们所有的视图函数都写在了一个文件当中,当我们的业务越来复杂的时候。视图函数也会变得越来越多,导致阅读不方便,维护起来困难等难题。比如下... 查看详情

flask框架从入门到精通之模板表单(二十)(代码片段)

知识点:1、WTF使用一、概况当前端使用form表单进行参数传递时候,前端一般都会用js来校验用户输入的参数是否合法。作为后端,不能依赖前端的校验。要在前端校验的基础上在进行一遍校验,防止程序出现异常... 查看详情

flask框架从入门到精通之模板导入与继承(十八)(代码片段)

知识点:1、模板导入2、模板继承一、概况模板导入就是将另一个模板加载到当前模板中,直接渲染。模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。典型应用:网站的... 查看详情

flask框架从入门到精通之模板导入与继承(十八)(代码片段)

知识点:1、模板导入2、模板继承一、概况模板导入就是将另一个模板加载到当前模板中,直接渲染。模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。典型应用:网站的... 查看详情

flask框架从入门到精通之消息闪现和日志记录(二十一)(代码片段)

知识点:1、闪现2、日志一、概况Flask提供了一个功能方便向前端反馈消息,这个功能叫闪现。闪现的功能是基于session实现,所以我们在使用闪现的时候需要配置secret_key。二、使用我们用一个上传图片的例子来实现闪... 查看详情

flask从入门到精通之使用flask-migrate实现数据库迁移

...据库中的所有数据。更新表的更好方法是使用数据库迁移框架。源码版本控制工具可以跟踪源码文件的变化,类似地,数据库迁移框架能跟踪数据库模式的变化,然后增量式的把变化应用到数据库中。  S 查看详情

flask框架从入门到精通之模板宏(十九)(代码片段)

知识点:1、宏的基本使用一、概况在Flask的模板中有一个特性和Django内不同,这个特性就是宏。宏的功能和python中的函数类似。声明宏%macro宏的名字(参数)%​内容%endmacro%调用宏宏的名字(参数)在python函数可以实现代码复... 查看详情

flask框架从入门到精通之自定义response(代码片段)

知识点:1、自定义响应信息2、返回Json一、概况我们都知道当浏览器发起一个请求时,服务器会给一个响应。这个响应包含了返回的内容类型,状态码,服务器版本等一些。如下图:如果我们不进行修改这里... 查看详情

flask从入门到精通之链接的使用

  在Web开发中,任何具有多个路由的程序都需要可以连接不同页面的链接,例如导航条。  在模板中直接编写简单路由的URL链接不难,但对于包含可变部分的动态路由,在模板中构建正确的URL就很困难。而且,直接编写URL会... 查看详情