说实在的真不知道该怎么起这篇文章的标题。需求是这样的,数据库的设计与定义采用sqlalchemy ORM的方式进行定义,那么如果对需要对数据库结构进行修改呢,谁家的数据库设计也不会保证一步到位啊,这种模式下是不是我要先修改ORM定义,再用一个SQL修改数据库结构,因为当我的数据库已经在运行之后,总不能再Base.metadata.create_all()了吧。alembic就是为了解决这种问题而存在的,其作者正是sqlalchemy作者本人,以前有个sqlalchemy-mirgration的项目是完成这个功能的,但是那个项目已经不更新了,所以sqlalchemy官方推荐用alembic做迁移和版本管理。
安装
安装十分简单,因为是python官方源里的包:
pip install alembic
第一次定义数据结果构
假设我们定义一个联系人通讯录的数据库,包括两个表,文件名为models.py:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
person_id = sa.Column(sa.Integer, primary_key=True)
nickname = sa.Column(sa.String(64), nullable=False)
password = sa