【Python】alembic: SQLalchemy 数据库版本迁移工具

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"
升级数据库
  1. 生成升级/降级文档

在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
  .

参考链接:

https://blog.csdn.net/deerlux/article/details/50181997

https://www.cnblogs.com/xiaoming279/p/6641601.html

发布了76 篇原创文章 · 获赞 221 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/chichu261/article/details/87307773
今日推荐