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, osfrom db import modelsroot = 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