13、flask-模型-models-模型配置使用-数据迁移

1.配置数据库

__init__.py

#__init__.py: 初始化文件、用来创建flask应用


from flask import Flask
from .views import blue     #蓝图
from .exts import init_exts  #导入插件模块 exts.py


def create_app():
    app = Flask(__name__)   #创建flask应用

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

    # 配置数据库
    db_uri = 'sqlite:///sqlite3.db' #数据库路径,自动会创建数据库文件sqlite3.db
    app.config['SQLALCHEMY_DATABASE_URI'] = db_uri  #配置数据库连接的路径
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False    #关闭追踪数据库的修改

    # 初始化插件 exts.py
    init_exts(app=app)

    return app

2.配置第三方插件

App目录下创建exts.py文件

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

# 1. 导入
from flask_sqlalchemy import SQLAlchemy #做ORM关系的映射
from flask_migrate import Migrate   #做数据迁移

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

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

3.模型models.py

# 模型数据库

from .exts import db    #导入db对象

# 模型     对应数据库中的     数据库
# 类                       表结构
# 类属性                    表字段
# 对象                      表的一行数据



# 模型: 类名
# 必须继承:db.Model  才是 一个模型
class User(db.Model):
    # 表名
    __tablename__ = 'tb_user'
    # 字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True, index=True)
    age = db.Column(db.Integer, default=1)
    sex = db.Column(db.Boolean, default=True)
    salary = db.Column(db.Float, default=10000, nullable=False)

# db.Column :表示字段
# db.Integer :表示字段的类型 整数类型
# primary_key=true : 表示主键
# autoincrement=true : 表示自增
# db.String(50) : 表示字段的长度 相当于varchar(50)
# index=True : 表示创建索引
# db.Boolean : 表示布尔类型
# default=1 : 表示默认值
# db.Float : 表示浮点类型
# nullable=False : 表示不能为空
  • 模型创建好后就要执行数据迁移

注意

要确保已安装:Flask-Migrate
确保已在__init__.py中配置好数据库
在views.py中导入models模块:from .models import *
要在项目的根目录下

  1. 执行以下命令:
#1.先创建迁移文件夹、该命令只需执行一次即可
#执行后会生成`instance`和migrations 两个目录
$ flask db init

#2. 生成迁移文件
# 会去找继承 db.Model 的类,执行类中的内容
# 如果不是继承 db.Model 的话就无法执行生成迁移文件
# 会在 instance 下生成 sqlite3.db 数据库文件(在__init__.py中配置数据库时定义的变量名)
# 会在 migrations/versions 下生成xxxx.py 迁移文件
$ flask db migrate

#3.执行迁移文件中的升级
# 将数据结构变为最新的迁移文件 xxxx.py 中的语句执行 创建表的操作
$ flask db upgrade


#4.执行迁移文件中的降级(没必要不需要执行)
# 撤销上一步的升级 - 就是回退到上一个迁移文件(xxx.py)中的数据结构
flask db downgrade
  • 注意:如果models.py中模型变化了(如新增字段货表结构修改),都需要重新做数据迁移-第2步,和数据升级-第3步-(flask db init 不需要再执行)

表的结构

项目目录结构如下

模型的字段类型

字段类型 中文名称备注 说明
Integer 整数 存储整数值
String 字符串 存储定长字符串
Text 文本 存储可变长度的文本
Date 日期 存储日期值(不含时间)
DateTime 日期时间 存储日期和时间值
Boolean 布尔值 存储True或False值
Float 浮点数 存储浮点数值
Numeric 数值 存储精确的十进制数值,常用于货币金额
Time 时间 存储时间值(不含日期)
Enum 枚举 存储一组预定义值
LargeBinary 大型二进制 存储二进制数据,例如文件和图片
Interval 时间间隔 存储时间间隔
JSON JSON 存储JSON格式的数据
UUID UUID 存储全局唯一标识符
ARRAY 数组 存储一个数据类型的数组

常用约束

选项名 说明
primary_key 如果设置为True,这就是表的主键
unique 为True、表示唯一值
index 为True、表示为这一列创建索引、提升查询效率
nullable 为True、表示允许这一列可以为空值、False则不为空值
default 设置默认值
posted @ 2024-07-26 23:48  little小新  阅读(104)  评论(0编辑  收藏  举报