使用alembic进行openstack数据库版本管理

在线更新

1. alembic init <YOUR_DIR># 此处,我用的是alembic_v


2.修改alembic.ini。如下:

sqlalchemy.url = driver://user:pass@localhost:port/dbname
	具体实例:
	sqlalchemy.url = mysql+mysqldb://storage:lenovo@192.168.100.6/storagemgmt
解释:
此部分替换成对应的数据库连接,这个数据库连接的写法是与SQLAlchemy创建engine时是一样的。

比如使用SQLAlchemy与mysqldb,那数据库连接就是如上“具体实例所示”。

3. 修改en.py。把target_metadata = None,改为如下:
import osimport sys# 此处需要将项目路径添加到sys.path,否则from import时找不到
modelssys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")
from models.base import Base
Modeltarget_metadata = BaseModel.metadata
解释:在env.py中,将target_metadata设置成项目的model,使alembic能获取到项目中model定义的信息
如:我的models.py的目录如下,那么应该如此导入。

/usr/lib/python2.7/site-packages/storagemgmt/storage/sqlalchemy/models.py


其中Base是在models.py中定义的,如下:

4. 创建新的版本。

alembic revision --autogenerate -m "init db"
解释:用 alembic revision -m+注释 创建数据库版本. “版本号+注释”就是版本文件的名字。
	这个命名规则是在配置文件中定义的。

5.更新数据库

alembic upgrade head

6.将数据库降级到最初版本.

alembic downgrade base

7.将数据库降级到执行版本

使用alembic downgrade+版本号,不包含注释部分.

alembic downgrade <version>
	如: alembic downgrade 0e8e73745ff2

离线更新

在某些不适合在线更新的情况,可以采用生成sql脚本的形式,进行离线更新:

alembic upgrade <version> --sql > migration.sql
如:

alembic upgrade ae1027a6acf --sql > migration.sql
从特定起始版本生成sql脚本:

alembic upgrade <vsersion>:<vsersion> --sql > migration.sql
如:

alembic upgrade 1975ea83b712:ae1027a6acf --sql > migration.sql
如果是数据库降级操作,把upgrade替换为downgrade。

Reference:

https://docs.openstack.org/developer/neutron/devref/alembic_migrations.html 


原文地址:https://www.cnblogs.com/double12gzh/p/10166105.html