python flask使用flask_migrate管理数据库迁移

  • 🌈 所属专栏:Flask
  • 作者主页:Mr.Zwq
  • ✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询!

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩🥰😍

目录

简介

安装

主要命令

1.初始化

2.迁移

3.升级

4.降级

代码实现

config.py配置文件

exts.py文件

models.py文件

app.py文件

使用flask_migrate过程

首次使用

后续使用

总结


简介

Flask-Migrate是Flask应用中的一个扩展子模块,它基于Alembic进行了封装,并集成到Flask中,主要用于在Flask应用中轻松管理数据库迁移。以下是Flask-Migrate的主要特点和功能:

  1. 数据库迁移管理
    • 支持多种数据库。
    • 提供一个简单的命令行工具,用于创建和管理数据库迁移。
  2. 数据库模型定义
    • 提供一个简单的方式来定义数据库模型,使在定义数据库迁移时更加容易。
  3. 数据库迁移脚本生成
    • 可以自动生成数据库迁移脚本,并支持手动编辑和修改。
  4. 数据库版本控制
    • 能够自动检测数据库的版本,并确保进行正确的迁移。
  5. 数据库备份和还原
    • 提供一个简单的方式来备份和还原数据库。
  6. 程序结构
    • 主要包含Flask-Migrate的初始化和配置、数据库的版本号管理、数据库迁移的管理等功能。
    • flask_migrate.MigrateCommand:用于注册Flask-Migrate命令,包括数据库初始化、数据库迁移等命令。
    • flask_migrate.Migrate:迁移引擎,主要实现数据库模型与数据库表的映射、迁移脚本的生成和执行等功能。
    • flask_migrate.utils:包含一些常用的工具函数,如生成哈希、获取当前时间等。
    • migrations:存放迁移脚本的目录。
    • versions:存放迁移版本号的目录。
  7. 数据结构
    • 在管理数据库迁移的过程中,Flask-Migrate使用两个主要数据结构:
      • 数据库版本号(Database Version):表示当前数据库的版本号。在创建数据库时,版本号为0,每接受一次迁移,版本号将会递增。
      • 迁移脚本(Migration Script):包含数据库结构的更改内容。使用SQLAlchemy生成,通过将当前的数据库模型和数据库版本号进行比较,生成一个差异脚本,将这份脚本应用于目标数据库,从而完成数据库的迁移。每次迁移会生成一个新的迁移脚本。
  8. 使用流程
    • 安装Flask-Migrate:pip install flask-migrate
    • 初始化:在应用中配置Flask-Migrate,并创建必要的目录结构。
    • 迁移操作:通过命令行工具执行数据库迁移操作,如初始化、迁移、升级等。

Flask-Migrate通过提供这些功能,使Flask应用能够更方便、更安全地管理数据库迁移,从而保持数据模型与数据库结构的一致性。


安装

python 复制代码
pip install flask-migrate

主要命令

1.初始化

flask db init

2.迁移

flask db migrate

3.升级

flask db upgrade

4.降级

flask db downgrade

代码实现

config.py配置文件

python 复制代码
class Config():
    # 数据库配置信息
    host = '127.0.0.1'  # 主机
    port = 3306         # 端口
    user = 'root'       # MySQL账户
    pwd = '123456'      # MySQL密码
    database = 'test' # 使用的数据库名称
    # SQLALCHEMY_DATABASE_URI = 'sqlite:///XXX.db'  # sqlite数据库的配置(数据库名称:XXX.db)
    SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{user}:{pwd}@{host}:{port}/{database}?charset=utf8mb4"   # MySQL数据库
    SQLALCHEMY_ECHO = False  # 查询时是否显示原始SQL语句,为False不显示
    SQLALCHEMY_TRACK_MODIFICATIONS = False  # 跟踪数据库的修改,会增加性能消耗,不建议开启

exts.py文件

python 复制代码
# 扩展放在独立文件供其它地方进行引用,可有效防止循环导包问题
from flask_sqlalchemy import SQLAlchemy
 
db = SQLAlchemy()

关于 flask_sqlalchemy 可查看文章:python flask配置数据库并进行orm操作 flask_sqlalchemy-CSDN博客

models.py文件

python 复制代码
from exts import db
from datetime import datetime

# 测试用户表
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), nullable=False)
    email = db.Column(db.String(50), unique=True, nullable=False)
    password = db.Column(db.String(50), nullable=False)
    create_time = db.Column(db.DateTime, default=datetime.now)

app.py文件

python 复制代码
from flask import Flask
from config import Config
from exts import db
from models import User
from flask_migrate import Migrate

app = Flask(__name__)

# 读取参数配置
app.config.from_object(Config)
# 创建db对象
db.init_app(app)

# 创建migrate对象并绑定app,db
migrate = Migrate(app, db)


@app.route('/')
def index():
    return 'hello world'


if __name__ == '__main__':
    app.run(debug=True)

使用flask_migrate过程

首次使用

**1.**进入app.py所在的项目目录下,打开终端

第一次使用时需先进行初始化命令:flask db init

完成后,将会在本目录下自动生成migrations文件夹:

2.接下来进行迁移操作:flask db migrate

3.再进行升级操作:flask db upgrade

至此,数据表user已经创建成功。

查看user表:

与models文件相对应。

后续使用

每次修改models.py文件后,先进行迁移再进行升级操作即可,数据表即会被对应修改。

即先:flask db migrate ,再:flask db upgrade

想要回退数据库的修改操作使用**:flask db downgrade** 进行降级操作即可**。**


总结

感谢观看,原创不易,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹🌹🌹

****************

👍🏻也欢迎你,关注我。👍🏻

如有疑问,可在评论区留言哦~

相关推荐
吱吱鼠叔16 分钟前
MATLAB数据文件读写:2.矩阵数据读取
数据库·matlab·矩阵
数据分析螺丝钉17 分钟前
力扣第240题“搜索二维矩阵 II”
经验分享·python·算法·leetcode·面试
掘根28 分钟前
【MySQL】Ubuntu环境下MySQL的安装与卸载
数据库·mysql·centos
小蜗笔记1 小时前
在Python中实现多目标优化问题(7)模拟退火算法的调用
开发语言·python·模拟退火算法
TANGLONG2221 小时前
【C语言】数据在内存中的存储(万字解析)
java·c语言·c++·python·考研·面试·蓝桥杯
知识分享小能手1 小时前
mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)
大数据·开发语言·数据库·sql·学习·mysql·数据分析
魏大橙1 小时前
Fastjson反序列化
开发语言·python
暮毅1 小时前
Django对接支付宝沙箱环境(2024年9月新测有效)
数据库·django
fat house cat_1 小时前
mysql-索引笔记
数据库·mysql