当前位置: 首页 > article >正文

falsk-模型基础

前面的学习中我们从创建flask项目开始、学习了路由、模版、请求响应、会话技术和模版语言,接下来就要学习模型了,也就是数据、怎么和数据库交互链接等。

1、安装跟数据库相关的插件

(1)安装flask_sqlalchemy(用于ORM)

Flask中一般使用flask-sqlalchemy来操作数据库。

SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升。
SQLAlchemy是一个关系型数据库框架,支持多种数据库后台。它提供了高层的 ORM 和底层的原生数据库的操作。

pip install Flask-SQLAlchemy

(2)安装flask-migrate(用于数据迁移)

Flask-Migrate 是 Flask 的一个扩展,它集成了 Alembic 到 Flask 应用中。它用于管理数据库迁移。

安装 Flask-Migrate 的方法很简单,通过 pip 安装即可:

pip install Flask-Migrate

(3)安装pymysql(MySQL驱动)

pip install pymysql

2、导入插件、初始化、链接数据库

我们创建一个项目叫做“FlaskPro1_模型基础”,根据以前学习的内容,确保项目运行正常。

(1)在项目中我们创建一个叫做exts.py的文件专门来管理插件,然后在里面导入、初始化插件,代码如下:

# exts.py:插件管理
#  扩展的第三方插件

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

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

#下面这个操作我们写一个init_exts的方法,待会传进来app,然后插件和app做绑定
# 3. 和app对象绑定
def init_exts(app):
    db.init_app(app=app)
    migrate.init_app(app=app, db=db)

(2)上面完成了插件的引入、初始化,接下来在__init__.py文件中,配置数据库同时调用刚才创建的exts.py文件里的init_exts方法,插件和app对象的绑定。

# __init__.py :初始化文件,创建Flask应用

from flask import Flask
from .views import blue
from .exts import init_exts


def create_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

(3)创建数据库(新建模型)

上面完成了插件导入、初始化以及配置工作,接下来创建模型,模型Model其实是一个db.Model的类,下面我们创建一个User表(必须继承 db.Model),代码如下,注意代码中的注视,注释详细解释了每个语句的含义。

# models.py : 模型,数据库

from .exts import db

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

# 模型Model:类
#  必须继承 db.Model
class User(db.Model):
    # 表名
    __tablename__ = 'tb_user'
    # 定义表字段
    #创建一个id字段,int类型,作为主键、自增
    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)
    salary2 = db.Column(db.Float, default=100000, nullable=False)


# db.Column : 表示字段
# db.Integer:表示整数
# primary_key=True : 主键
# autoincrement=True : 自动递增
# db.String(30): varchar(30) 可变字符串
# unique=True : 唯一约束
# index=True : 普通索引
# default=1 : 默认值
# nullable=False : 是否允许为空

3、数据迁移

为什么要做数据迁移?

其实我们上面完成的只是模型的创建,那我们就需要把模型迁移到数据库,真正的生成数据库,然后数据库中生成我们模型中创建的表。

数据迁移的详细步骤(下面这些步骤也是我们刚才完成的,下面我们回顾一下)

(1)安装好数据迁移的包flask_sqlalchemy和flask-migrate

(2)在exts.py中初始化migrate和sqlalchemy

(3)在models中定义好模型

(4)在views.py中一定要导入models模块from .models import *

(5)配置好数据库(sqlite3或者MySQL)

上面的步骤我们已经完成了,接下来开始第6项,执行数据迁移的命令

(6)执行数据迁移命令(终端进入app.py所在的目录,然后输入以下终端命令)

  • flask db init 创建迁移文件夹migrates,只调用一次

        这里面执行之后会在目录中生成migrations文件夹,结构如下

        

        注意:init操作执行一次就可以        

  • flask db migrate 生成迁移文件

        这个操作完成之后就会生成迁移文件,也就是migrations/versions中的文件

  • flask db upgrade 执行迁移文件中的升级

        执行完之后真正实现了数据的迁移,

        此时再到创建的数据库中查看就发现多了我们模型中创建的表以及表字段,

        注意:假如模型中有数据的改动,比如迁移好后我又在模型里创建的表中增加了一个字段,

        那就必须要重新迁移,也就是重新执行flask db migrate和flask db upgrade,这两个执行完

        才完成了数据的迁移同步

  • flask db downgrade执行迁移文件中的降级

        这个类似是回退,比如上面表中增加了一个字段后发现后悔了,但是已经完成了数据的

        迁移,这个时候可以执行 flask db downgrade,实现回退的逻辑

     

数据迁移完成后实际上就完成了数据库以及表的创建,接下来就可以从模型中存取数据了


http://www.kler.cn/a/415545.html

相关文章:

  • 安卓悬浮窗应用外无法穿透事件问题
  • 微软要求 Windows Insider 用户试用备受争议的召回功能
  • STM32C011开发(1)----开发板测试
  • 电脑无互联网连接怎么解决?分享5种解决方案
  • Cypress内存溢出奔溃问题汇总
  • 微知-git如何添加空目录的几种方式?(.gitkeep, githook, gitconfig)
  • Android 12.0 DocumentsUI文件管理器首次进入默认显示内部存储文件功能实现
  • 篡改代码事件升级,字节索赔800万
  • Android 图形系统之四:Choreographer
  • 【verilog教程】verilog函数
  • wpf 的MVVM
  • 《数据挖掘:概念、模型、方法与算法(第三版)》
  • 阈值分割创新点探究(附带opencv c++代码)
  • leetcode:637二叉树的层平均值
  • 【力扣双周赛 144】贪心堆 网格图 DP
  • 重塑用户体验!快手电商智能巡检平台的实践与探索
  • 跨平台应用开发框架(4)----Qt(系统篇)
  • MarsCode青训营序章Day1|稀土掘金-1.找单独的数、47.完美偶数计数、3.数组字符格式化
  • 【Java基础入门篇】一、变量、数据类型和运算符
  • 数据结构---链表
  • PHP用正则把HTML中的js脚本过滤掉
  • 李春葆《数据结构》-查找-课后习题代码题
  • TiDB 架构
  • mysql集群NDB方式部署
  • 基于Java Springboot 易家宜超市云购物系统
  • Conda 管理python开发环境