# 🕸 数据库迁移(Legacy)
WARNING
本文已经过时,请使用 db_client进行数据库迁移。
# 安装
首先需要在 flask-boot 初始化器中添加对 migration 初始化器的依赖
该初始化器让 flask-migrate 适配了 db_client。这样开发者就可以使用 Flask-Migrate 愉快地进行数据库迁移了。
TIP
你可以使用内置的教程代码来学习数据库迁移,记得在脚手架工具上选择 需要示例代码
# 初始化 migrations 文件夹
在根目录一节中我们对项目的目录进行过讲解,其中的 migrations 文件夹就是用来存放数据库迁移文件的。
.
├── {{flask-app-name}}
├── requirements
├── migrations -- 数据库迁移环境与目录,注意和 flask-app 目录同级
├── README.md
├── pyproject.toml
...
在根目录下使用初始化的命令来生成该文件夹:
export FLASK_APP=run:app
export DG_SDK_RDB_AUTO_INIT=False
export DG_SDK_RDB_APP_CTX_TYPE=flask
flask db init
得到 migrations 文件夹后,它是一个标准的 alembic 迁移文件夹 (opens new window)。结构如下
migrations
├── README -- 迁移说明,需要开发者自己维护
├── alembic.ini -- alembic 配置,大部分时候都不需要修改
├── env.py -- alembic 环境,主要是设置 metadata 和 engine, 由 Flask-Migrate 处理好了,大部分时候都不需要修改
├── script.py.mako -- 迁移模板,每次生成迁移脚本时的模板样式
└── versions -- 数据库版本文件
# 生成迁移文件
通过 flask db migrate -m "$YOU_MESSAGE"
来让 Flask-Migrate 自动生成一个版本文件。
WARNING
注意,自动生成的迁移文件下可能会不准确
(比如可能会少添加索引,尤其是在迭代了几个数据库版本后)。
因此开发者必须手动对生成的文件进行检查,干预 def upgrade()
和 def downgrade()
方法的默认实现。
随着版本升级,一些数据清洗的工作也可以被手动添加到对应的方法中。
# 迁移数据库
随后,我们可以使用 flask db upgrade/downgrade
方法对数据库进行升降级。
特别的,模板设置了 deploy/migration.sh
文件来进行数据库的迁移,同时将该脚本植入在基础镜像的 entrypoint (opens new window) 中。这样在容器启动时就会自动自动完成数据库的迁移。
WARNING
如果使用了自动数据库建议,可能:
- 迁移失败将会导致容器无法启动
- 自动迁移不受人为控制,会导致数据库问题
因此还是推荐使用命令行手动进行数据库的迁移。
如果需要关闭自动迁移,可以设置环境变量 DG_MIGRATE_WHEN_STARTS_UP=0
更多高级的用法见 Flask-Migrate (opens new window) 文档