没有接触 OpenStack 之前,一直以为只有代码、Office 文档之类有版本管理,没想到数据库也有版本管理,真是大开眼界。
基于 SQLAlchemy 的数据库版本管理工具有 SQLAlchemy-Migrate 和 Alembic。前者在 OpenStack 中用得最多,目前由 OpenStack 官方维护。
本文主要摘录自 SQLAlchemy-Migrate 官方样例,以后如有需要再做进一步探讨。
1. 新建一个数据库版本管理仓库
1 | $ pwd |
2. 新建一个 sqlite3 数据库
1 | $ sqlite3 project.db |
3. 关联仓库和数据库
关联仓库和数据库并为 manage.py 设置预设参数:
1 | $ python my_repository/manage.py version_control sqlite:///project.db my_repository |
可以看一下现在的数据库版本为 0:
1 | $ python my_repository/manage.py db_version |
3. 新建一个版本脚本
我们打算新建一个数据库表 account,可以这样子做:
1 | $ python my_repository/manage.py script "Add account table" |
接下来,我们修改新增的文件内容为:
1 | from sqlalchemy import Table, Column, Integer, String, MetaData |
数据库升级之前最好测试一下,确保如我们预期地工作:
1 | $ python my_repository/manage.py test |
接下来就可以升级数据库啦:
1 | $ python my_repository/manage.py db_version |
4. 编辑已有表
为已有表添加一个新的字段 email:
1 | $ python my_repository/manage.py script "Add email column" |
编辑新增的文件内容为:
1 | # my_repository/versions/002_Add_email_column.py |
升级:
1 | $ python my_repository/manage.py test |
4. 版本回滚
我们也可以对数据库进行降级操作:
1 | $ python my_repository/manage.py downgrade 0 # 需指定要降级到的版本,这里我们是降级到版本 0 |