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** 进行降级操作即可**。**


总结

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

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

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

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

相关推荐
小龙在山东11 分钟前
Python 包管理工具 uv
windows·python·uv
weixin_3077791332 分钟前
批量OCR的GitHub项目
python·github·ocr
孤狼warrior1 小时前
灰色预测模型
人工智能·python·算法·数学建模
神仙别闹2 小时前
基于Python实现LSTM对股票走势的预测
开发语言·python·lstm
保持学习ing2 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
机器学习之心2 小时前
小波增强型KAN网络 + SHAP可解释性分析(Pytorch实现)
人工智能·pytorch·python·kan网络
JavaEdge在掘金2 小时前
MySQL 8.0 的隐藏索引:索引管理的利器,还是性能陷阱?
python
宇钶宇夕2 小时前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
站大爷IP2 小时前
Python办公自动化实战:手把手教你打造智能邮件发送工具
python
chao_7893 小时前
回溯题解——子集【LeetCode】二进制枚举法
开发语言·数据结构·python·算法·leetcode