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


总结

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

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

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

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

相关推荐
xiaohouzi11223317 分钟前
Python读取视频-硬解和软解
python·opencv·ffmpeg·视频编解码·gstreamer
念念不忘 必有回响21 分钟前
Pygame模块化实战:从零构建Aliens射击游戏全流程(一)
python·游戏·pygame
小蒜学长39 分钟前
基于uni-app的蛋糕订购小程序的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·小程序·uni-app
安然~~~44 分钟前
mysql多表联查
android·数据库·mysql
乐世东方客1 小时前
使用my2sql进行mysql的binlog恢复数据
数据库·mysql
肃清11 小时前
《深入解析数据库事务的ACID特性》
数据库·mysql
在路上`6 小时前
前端学习之后端java小白(四)之数据库设计
sql·学习
☼←安于亥时→❦7 小时前
PyTorch 梯度与微积分
人工智能·pytorch·python
程序员三藏8 小时前
2025最新的软件测试面试八股文(800+道题)
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
Pocker_Spades_A8 小时前
Python快速入门专业版(二十三):for循环基础:遍历字符串、列表与range()函数(计数案例)
python