Python轻量级Web框架Flask(5)——Flask模型基础和数据迁移

news2024/12/31 3:06:12

0、前言:学习这部分的前提是对python的面向对象有一定的了解,同时对MySQL有扎实的学习

1、Flask模型基础知识:

  • Flask模型
    在这里插入图片描述
  • ORM
    在这里插入图片描述
    (注意:在flask中用ORM可以实现SQL语句功能,但是并不意味着SQL语句不重要!)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 需要安装的包
    在这里插入图片描述
    注意:在pip 下载的时候后面通过 -i 加的url是源,目的是提高下载速度
    注意:Flask是一个轻量级框架,它的很多功能都需要用插件

2、数据迁移:

  • 数据迁移的步骤

    • 1、安装好数据迁移包:flask-sqlalchemy 和 flask-migrate
    • 2、在exts.py 中初始化Migrate 和 SQLALchemy(ext.py 是设计出来专门存放flask插件的)
    • 3、在models 中定义好模型
    • 4、在views.py 中一定要导入models模块(from .mocels import *)
    • 5、配置好数据库(sqlite3或MySQL)
    • 6、执行数据迁移命令:
      • 首先要在cmd或pycharm的terminal进入项目目录(app.py所在的目录):
        在这里插入图片描述

      • 指令输入:

      • flask db init 创建迁移文件夹migrates,只有在初始时调用一次

      • flask db migrate 生成迁移文件(会把继承自db.Model的类对应的内容转换为SQL语句)
        在这里插入图片描述
        在这里插入图片描述
        注意:这里我等好半天,才下载好驱动,多等会。
        在这里插入图片描述
        上面的所有步骤完成之后,就可以继续执行下面的代码了。

      • flask db upgrade 执行迁移文件中的升级
        在这里插入图片描述
        此时就能清晰看到表结构了,但是如果在model中修改了表结构,在数据库视图中是不会改变的,要想要数据库视图跟着改,就要做表迁移,所以最好一次就把表写好。【模型一旦改掉,就要做数据迁移,这样数据库当中的表才会跟着改动】
        重新迁移的方法: flask db migrate,执行完之后就能在文件列表的migrations中的versions中看到生成的新的py文件,打开该文件还能看到它上一个版本或者下一个版本,而且该文件的upgrade会记录发生的改变,然后执行 flask db upgrade 再回数据库中刷新下,就能看到数据库也会发生改变,如果要返回上一个版本,就再次执行flask db downgrade,然后刷新数据库就能看到数据库回到了上一个版本。如果执行了flask db downgrade 还想回到撤销前,就可以接着执行flask db downgrade,不用再执行flask db migrate了

      • flask db downgrade 相当于撤销对数据库执行的升级,如果执行了该命令,就要注意数据库和模型中的数据可能不同步的问题!

  • 数据迁移文件框架(该框架还是套用了“Flask项目拆分”的框架)
    在这里插入图片描述

  • __init __ 程序

# __init__.py : 初始化文件,创建Flask应用
from flask import Flask
from .views import blue
from .exts import init_exts

def creat_app():
    app = Flask(__name__)

    # 注册蓝图
    app.register_blueprint(blueprint=blue)

    # 配置数据库
    db_uri = 'sqlite:///sqlite3.db'
    app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False    # 禁止对象追踪修改

    # 初始化插件
    init_exts(app=app)

    return app

  • models 程序
# models.py : 模型,数据库

'''
    模型      ===      数据库
    类        ——>     表结构
    类属性     ——>    表字段
    一个对象   ——>    表的一行数据
'''


from .exts import db

# 模型Model:类
# 必须继承 db.Model User才能从普通的类变成模型
class User(db.Model):
    # 表名
    __tablename__ = 'tb_user'   # 数据迁移就是让模型变成表,ORM就是让类变成模型
    # 定义表字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), unique=True, index=True)
    age = db.Column(db.Integer, default=1)
    sex = db.Column(db.Boolean, default=True)
    salary = db.Column(db.Float, default=100000, nullable=False)


# db.Column : 表示字段
# db.Integer : 表示整数
# primary_key=True : 主键
# autoincrement=True : 自增长
# db.String(30) : 可变字符串
# unique=True : 唯一约束
# index=True : 设置普通索引

  • exts 程序
# exts.py:插件管理
# 拓展第三方插件

# 1. 导入第三方插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

# 2. 初始化
db = SQLAlchemy()   # ORM
migrate = Migrate() # 数据迁移

# 3. 和app对象绑定
def init_exts(app):
    db.init_app(app=app)
    migrate.init_app(app=app, db=db)

其余程序和“Flask项目拆分”的框架中程序一样,但是要注意:在views.py 中一定要导入models模块(from .mocels import *)


2、数据迁移总结:

  • 上面的步骤看着非常复杂,期间还夹杂一些插件下载操作。
  • 当我们真的配置好flask模型之后,每次调用无非就是复制模型,然后在模型的基础上添加内容,之后的数据迁移就很简单了。
  • 有了模型之后的数据迁移:
    • 1、在models中写好数据表结构
    • 2、打开pycharm的终端,将整个项目文件拖进终端(目的是从该项目文件中打开终端)
    • 3、flask db init 创建迁移文件夹migrates,只有在初始时调用一次
    • 4、flask db migrate 生成迁移文件(会把继承自db.Model的类对应的内容转换为SQL语句)
    • 5、flask db upgrade 该命令执行结束后,表就会生成,但是表中这个时候是没有数据的。(此时就能从MySQL中看到你数据库中的表)如果要对表进行“增删改查”要进入views中进行操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/420718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NISACTF2023 WP

NISACTF2023 WP 前言 2年多没玩CTF了,pwn显得手生了不少,我的PWN环境已经在硬盘的某个角落里吃灰了。今天参加了一场校赛,捣鼓了一下午,Reverse和PWN都AK了。其实比赛是新手向,没啥难度,不过有道PWN设计的…

ChatGPT实战100例 - (02) 自动出PPT它不香么?

文章目录ChatGPT实战100例 - (02) 自动出PPT它不香么?一、需求与思路1. 需求:出个PPT,5分钟后要用2. 思路:生成markdown然后转化二、生成markdown语法的思维导图1. 问题2. 回答三、把markdown文本转换成PPTChatGPT实战100例 - (02…

STM32 gpio外部中断详解

什么是中断? 打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续运行,就叫中断 中断的作用和意义 中断的意义:高效处理紧急程序,不会一直占用CPU资源 STM32 GPIO外部中断简图 NVIC 什么…

JSTL标签库

英文全称:Java Standard Tag Lib(Java标准的标签库) 使用目的:JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。 使用位置:JSTL标签是写在JSP当中的,但实际上最终还是要执行对应的jav…

Ubuntu 开机启动 通过crontab定时器去检查脚本 实现

有个项目的程序需要实现开机启动 通过添加一个qmcy.service服务的方法 发现 确实执行脚本了 但是脚本的程序缺并没有起来 但是如果手动执行这个脚本 程序是能起来的 不知道为啥 没办法 网上搜了下 可以通过 crontab定时器去检查 程序是否启动 没启动的话去 执行对应的脚…

【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成多图层地形贴图的算法设计

(2条消息) 【开发日志】2023.04 ZENO----Image Processing----CompositeCV、Composite2、Composite3_EndlessDaydream的博客-CSDN博客 (2条消息) 【开发日志】2023.04 ZENO----Image Processing----ImageEdit、EditRGB、EditHSV_EndlessDaydream的博客-CSDN博客 (2条消息) 【…

telegraf在iiot领域的基本应用(Modbus,OPC)

熟悉telegraf是因为influxdb缘故,当时telegraf主要是作为granfa监控的agent一环,很多文章有相关的介绍,但作为java开发对telegraf(go语言开发)也仅仅只是适用级别,这边文章也只讲到一些简单的应用。希望能帮…

<STM32>STM32CubeMX-CAN通信(扫描读取数据方式)(5)

<STM32>STM32CubeMX-CAN通信(扫描读取数据方式)(5) 本节主要讲解CAN通信的功能,主要采用扫面检测接收数据的方式; CAN的详细解说可参考《STM32F4XXX中文参考手册》,资料有…

CDH 之 Kerberos 安全认证和 Sentry 权限控制管理(一)

一、Kerberos 和 Sentry 概述 1.1 什么是 Kerberos Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,…

java微服务商城高并发秒杀项目--011.授权规则和系统规则

授权规则在shop-order-server中新建RequestOriginParserDefinition.java,定义请求来源如何获取Component public class RequestOriginParserDefinition implements RequestOriginParser {Overridepublic String parseOrigin(HttpServletRequest request) {/*** 定义从请求的什么…

文本分类论文阅读

1.ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information(ACL2021) 字形嵌入根据汉字的不同字体获得,能够从视觉特征中捕捉汉字语义,拼音嵌入表征汉字的发音,解决了汉语中非常普遍的异义异义现…

四、vue基础-指令(一)、vscode代码片段

一、vscode代码片段 我们在前面联系Vue的过程中,有些代码片段是需要经常写的,我们再VSCode中我们可以生成一个代码片段,方便我们快速生成。VSCode中的代码片段有固定的格式,所以我们一般会借助于一个在线工具来完成。 具体步骤如…

01_什么是Uboot

目录 U-Boot简介 获取Uboot U-Boot初次编译 U-Boot烧写与启动 U-Boot简介 Linux系统要启动就必须需要一个bootloader程序(裸机程序),也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux镜像从flash(NAND,NOR FLASH,SD,EMMC等…

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码,查询手机号在网状态,返回在网、在网不可用、不在网(销号/未启用/停机)等多种状态,查询手机号在网状态之后,可以根据具体的业务需求来进行不同的处理。 本文主要介…

EA的使用---文档的生成

EA中文档的自动生成 1.找到如下界面 2.选择第一个 3.设置存储的位置 4.点击Generate 5.查看生成的文档

ViT Vision Transformer进行猫狗分类

文章目录依赖准备数据集合残差结构PatchEmbed模块Attention模块MLPBlockVisionTransformer结构模型定义定义一个模型训练VISION TRANSFORMER简称ViT,是2020年提出的一种先进的视觉注意力模型,利用transformer及自注意力机制,通过一个标准图像…

【C++STL精讲】string的模拟实现

文章目录💐专栏导读💐文章导读🌷定义string类🌷构造函数🌷拷贝构造函数🌷赋值重载🌷析构函数🌷[]操作符重载🌷比较运算符重载🌷c_str、size、capacity&#x…

模板学堂|DataEase图表样式解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…

「VS」Visual Studio 常用小技巧

目录指定代码不编译设置选中项目为启动项代码区显示行号新建垂直文档组生成后将dll复制到指定目录指定代码不编译 说明:在项目开发时,有时候已经将代码加入到项目中,但有不想要编译时可以一下操作。 文件处右键→属性→常规→从生成中排除→选…

快速解决CentOS中yum下载慢的问题(更换成阿里云)

目录1、备份自带的YUM源2、下载新的yum源3、清除旧的 yum 缓存4、更新yum缓存4、查看更换的阿里云镜像的仓库是否生效。为了下载速度快,每次都要做好镜像的更改,既然次数多,懒得每次还来查资料,就自己写一篇博客加强自己的记忆。 …