Admin

Alembic 使用入门
2020年4月14日 15:25 23 0 0 0

Alembic 使用入门

安装

在项目Python环境执行:

  1. pip install alembic

创建Alembic相关文件

在代码根目录执行:

  1. alembic init alembic

说明:

  • 将在代码根目录创建文件alembic.ini,为alembic配置文件
  • 将在代码根目录创建目录alembic,为alembic相关文件存储

连接数据库

修改文件alembic.ini,连接到数据库(空数据库):

  1. sqlalchemy.url = mysql+mysqlconnector://root:000000@127.0.0.1:3306/test_db

检测模型

修改alembic/env.py,添加模型metadata:

  1. import sys, os
  2. from db import models
  3. root = os.path.dirname(os.path.dirname(__file__))
  4. print(root)
  5. sys.path.append(root)
  6. target_metadata = models.Base.metadata

版本1.0

空数据库基础上,在项目Python环境执行,生成版本1.0

  1. alembic revision --autogenerate -m "1.0"

这样就在alembic/versions下创建了一个从空数据库到包含所有模型的版本文件,以1_0结尾

同时,使用命令alembic history可以看到:

  1. <base> -> fdcb6079fa7e, 1.0

空数据库升级到1.0

  1. alembic upgrade head

这样,就能在数据库中看到所有模型对应的表。

退回空数据库

在任意版本,都可以退回到空数据库:

  1. alembic downgrade base

这样,数据库又回到了空数据库状态

重新生成1.0

例如,生成1.0并升级后,数据库又有新的改动,又不想新增一个版本(适用于(多人)研发时,临时版本不入git)

先退回到空数据库,删除文件alembic/versions/xxxx_1_1.py,重新生成1.0然后升级即可

版本2.0

假如,已经生成并升级到1.0,新的模型变更后,生成2.0版本文件并升级

  1. alembic revision --autogenerate -m "2.0"
  2. alembic upgrade head

2.0回退1.0

假如,已经创建并升级2.0,模型又有变更,又不想创建新的版本(适用于(多人)研发时,临时版本不入git),可以回退到1.0

例如,1.0的版本号是fdcb6079fa7e:

  1. alembic downgrade fdcb6079fa7e

此时,数据降级到1.0,删除文件alembic/versions/xxxx_2_0.py,然后重新生成2.0版本并升级

查询所有版本

  1. alembic history

输出:

  1. fdcb6079fa7e -> b4d4a8ed7f12 (head), 2.0
  2. <base> -> fdcb6079fa7e, 1.0

说明:

  • base: 最低版本,即空数据库
  • head: 最新版本,即2.0

查询当前所在版本

查询数据库当前所在的版本号:

  1. alembic current

如果没有输出版本号,则是空数据库,即base

通用升级

升级到比当前版本更新的版本

  1. alembic upgrade 指定版本号

升级到最新版本:

  1. alembic upgrade head

通用降级

降级到比当前版本更旧的版本

  1. alembic downgrade 指定版本号

降级到最低版本空数据库:

  1. alembic downgrade base

生成版本到版本之间的sql文件

例如1.0fdcb6079fa7e)到2.0(b4d4a8ed7f12),先降级到1.0

  1. alembic downgrade fdcb6079fa7e

然后生成sql:

  1. alembic upgrade b4d4a8ed7f12 --sql > 1.0_2.0.sql

参考链接

https://juejin.im/post/5c33fe056fb9a049b07d846e

发布内容,请遵守相关法律法规。
评论