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


总结

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

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

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

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

相关推荐
正在走向自律3 分钟前
从Oracle到金仓KES:PL/SQL兼容性与高级JSON处理实战解析
数据库·sql·oracle·json·金仓数据库·电科金仓·兼容性挑战
keineahnung23453 分钟前
PyTorch動態形狀系統的基石 - SymNode
人工智能·pytorch·python·深度学习
AwakeFantasy4 分钟前
关于最近想做一个基于日k选股票的系统这件事
python·股票·量化
昔时扬尘处7 分钟前
如何检测python和pytest的安装环境
开发语言·python·pytest·自动化测试平台·adi
cyhysr9 分钟前
oracle的model子句让sql像excel一样灵活
数据库·sql·oracle
熊文豪9 分钟前
电科金仓数据库如何支持Oracle风格的PL/SQL操作
数据库·电科金仓·kes
小尧嵌入式14 分钟前
Linux的shell命令
linux·运维·服务器·数据库·c++·windows·算法
voltina14 分钟前
事务操作流程
数据库
码界奇点14 分钟前
基于Django与Ansible的自动化运维管理系统设计与实现
运维·python·django·毕业设计·ansible·源代码管理
Hello.Reader19 分钟前
Flink SQL 模式识别用 MATCH_RECOGNIZE 把 CEP 写成 SQL
sql·flink·知识图谱