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.先创建迁移文件夹、该命令只需执行一次即可 #执行后会生成`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 | 设置默认值 |
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18326477
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步