Alembic
官网:https://alembic.readthedocs.io/
安装
在虚拟环境下安装:
pip install alembic
初始化alembic环境
# 切换到项目根目录下
alembic init alembic
# init之后的alembic指的是保存迁移文件的目录名称。
# 执行之后会在项目根目录下生成 alembic.ini文件 和制定名称的迁移文档保存目录()。
修改配置文件
修改alembic.ini配置文件,只修改数据库连接部分即可,
将sqlalchemy.url = driver://user:pass@localhost:port/dbname
修改为
# mysql
sqlalchemy.url = mysql+pymysql://root:@localhost/linux_study
# postgres
sqlalchemy.url = postgresql+psycopg2://root:[email protected]/linux_study
修改alembic/env.py
将target_metadata = None
修改为
import sys
from os.path import abspath, dirname
sys.path.append(dirname(dirname(abspath(__file__))))
from modules.models import Base
target_metadata = Base.metadata
自动创建版本
使用alembic revision -m “注释” 创建数据库版本,上面我们修改了配置文件alembic/env.py,指定了target_metadata,这里可以使用–autogenerate参数自动生成迁移脚本。
$ alembic revision --autogenerate -m "initdb"
升级数据库
- 生成升级/降级文档
在models.py所在目录下运行升级命令:
alembic revision --autogenerate -m "add xxxx column" # 引号中为注释,只能用英文,不能写汉字
执行成功会看到终端中输出的 … done
升级之后会在 迁移文档目录中生成对应的迁移文件。
打开可以检查需要升级的数据库的信息, version信息等
2、执行升级命令
alembic upgrade head # 升级到最新版本
head是指的版本号,针对哪个版本升级数据库,也可以写上述那个versions目录下生成的那个版本号4624XXXX,如果没有重复的话可以只写前几位。
head目前是指向最新的版本。
打开这个数据库看一下,可以发现其表格结构已经变了
并且还出现了一个存储当前版本号的表alembic_version。
3、执行降级
alembic downgrade Revision-id -1
-1 是指降级到该Revision的前一个版本
注意:sqlite不支持数据库降级
其他常用参数
更新数据库
$ alembic upgrade 版本号
更新到最新版
alembic upgrade head
降级数据库
$ alembic downgrade 版本号
更新到最初版
alembic downgrade head
离线更新(生成sql)
alembic upgrade 版本号 --sql > migration.sql
从特定起始版本生成sql
alembic upgrade 版本一:版本二 --sql > migration.sql
查询当前数据库版本号
数据库中查看alembic_version表。
清除所有版本
将versions删掉,并删除alembic_version表
查看记录和历史
alembic history
.
参考链接: