Admin
在项目Python环境执行:
pip install alembic
在代码根目录执行:
alembic init alembic
说明:
alembic.ini
,为alembic配置文件alembic
,为alembic相关文件存储修改文件alembic.ini
,连接到数据库(空数据库
):
sqlalchemy.url = mysql+mysqlconnector://root:000000@127.0.0.1:3306/test_db
修改alembic/env.py
,添加模型metadata
:
import sys, os
from db import models
root = os.path.dirname(os.path.dirname(__file__))
print(root)
sys.path.append(root)
target_metadata = models.Base.metadata
从空数据库
基础上,在项目Python环境执行,生成版本1.0
:
alembic revision --autogenerate -m "1.0"
这样就在alembic/versions
下创建了一个从空数据库
到包含所有模型的版本文件,以1_0
结尾
同时,使用命令alembic history
可以看到:
<base> -> fdcb6079fa7e, 1.0
将空数据库
升级到1.0
alembic upgrade head
这样,就能在数据库中看到所有模型对应的表。
在任意版本,都可以退回到空数据库:
alembic downgrade base
这样,数据库又回到了空数据库状态
例如,生成1.0
并升级后,数据库又有新的改动,又不想新增一个版本(适用于(多人)研发时,临时版本不入git)
先退回到空数据库
,删除文件alembic/versions/xxxx_1_1.py
,重新生成1.0
然后升级即可
假如,已经生成并升级到1.0
,新的模型变更后,生成2.0
版本文件并升级
alembic revision --autogenerate -m "2.0"
alembic upgrade head
假如,已经创建并升级2.0,模型又有变更,又不想创建新的版本(适用于(多人)研发时,临时版本不入git),可以回退到1.0
例如,1.0
的版本号是fdcb6079fa7e
:
alembic downgrade fdcb6079fa7e
此时,数据降级到1.0
,删除文件alembic/versions/xxxx_2_0.py
,然后重新生成2.0
版本并升级
alembic history
输出:
fdcb6079fa7e -> b4d4a8ed7f12 (head), 2.0
<base> -> fdcb6079fa7e, 1.0
说明:
空数据库
2.0
查询数据库当前所在的版本号:
alembic current
如果没有输出版本号,则是空数据库
,即base
升级到比当前版本更新的版本
alembic upgrade 指定版本号
升级到最新版本:
alembic upgrade head
降级到比当前版本更旧的版本
alembic downgrade 指定版本号
降级到最低版本空数据库
:
alembic downgrade base
例如1.0
(fdcb6079fa7e
)到2.0
(b4d4a8ed7f12
),先降级到1.0
alembic downgrade fdcb6079fa7e
然后生成sql:
alembic upgrade b4d4a8ed7f12 --sql > 1.0_2.0.sql