Flask db 单分支维护方案

215 阅读3分钟

flask db 是 Flask - SQLAlchemy 与 Flask - Migrate 结合使用时的一个命令行工具集,用于数据库迁移管理。

功能概述

在 Flask 应用开发过程中,数据库的表结构可能会随着需求的变化而改变,如新增字段、修改表名等。flask db 工具能够帮助开发者管理这些数据库模式的变更,通过生成迁移脚本,使得数据库的升级和回滚操作变得更加方便和可控

常用命令

使用poetry run python -m 前缀 激活虚拟环境

  • flask db init:初始化迁移环境,创建 migrations 文件夹。
  • flask db migrate -m "xxxxx":根据数据库模型的变化生成迁移脚本。其中,-m 参数后面的内容是本次迁移的描述信息,方便后续查看和管理。执行该命令后,会在 migrations/versions 文件夹下生成一个新的迁移脚本文件。
  • flask db upgrade:将最新的迁移脚本应用到数据库,更新表结构。
  • flask db downgrade:回滚到上一个迁移版本,恢复数据库表结构。
  • flask db history:查看迁移历史记录,显示所有已应用和未应用的迁移脚本。
  • flask db current:查看当前数据库所处的迁移版本。

多分支管理

内部处理原理

flask db 借助 Flask - Migrate 与 Alembic 库来管理数据库迁移。Alembic 是一个轻量级的数据库迁移工具,它通过迁移脚本来跟踪数据库模式的变化。

  • 迁移脚本生成:当使用 flask db migrate 命令时,Alembic 会对比当前数据库模型(定义在 Python 代码里)和数据库的实际模式,然后生成一个 Python 脚本,这个脚本包含了将数据库从当前状态迁移到新状态所需的 SQL 语句。
  • 迁移脚本存储:生成的迁移脚本会被存储在项目的 migrations/versions 目录下,每个脚本都有一个唯一的版本号。
  • 迁移历史记录:Alembic 会维护一个迁移历史记录,记录每个迁移脚本的应用情况。这个记录通常存储在数据库的一个特殊表(默认是 alembic_version)中,该表包含了当前数据库所应用的迁移脚本的版本号。当执行

flask db upgrade以及flask db downgrade命令时会更新该表。

不同开发者在各自的功能分支上对数据库模型进行修改并生成迁移脚本。每个分支的迁移脚本都有自己的版本号和依赖关系,形成独立的迁移历史。当把这些功能分支合并到主分支时,由于不同分支的迁移脚本可能存在差异,Alembic 无法自动确定这些脚本的正确应用顺序,从而导致迁移历史出现分支。

解决方案

开发成员A 基于relase拉取feat_a 开发成员B 基于release拉取feat_b分支

开发完成后 都集成到feat_c分支 此时有一个开发成员执行merge操作 并检查生产的脚本是否正确

检查无误后 执行flask db upgrade 更新迁移脚本 并向git提交merge产生的新的迁移文件

# 查看所有 head
flask db heads

# 合并多个 head
flask db merge <head1> <head2> -m "merge multiple heads"

# 应用合并后的迁移脚本
flask db upgrade