1

SQLAlchemy默认的create_all()可以增量式创建数据库缺失的表,但是无法做到修改已有的表结构,或删除代码中已经移除的表。这个时候我们就需要用到Alembic这个SQLAlchemy migrations库。
安装:pip install alembic
官方文档:http://alembic.zzzcomputing.c...

Creating the Migration Environment

创建一个目录,然后在这个目录下执行

alembic init migrations

这便创建了migrations目录,该目录结构如下:
├──
│ ├── README
│ ├── env.py
│ ├── script.py.mako
│ └── versions
└── alembic.ini
env.py配置:

sqlalchemy.url = sqlite:///alembictest.db
from app.db import Base
target_metadata = Base.metadata

Building Migrations

自动生成一个Base Empty Migration

alembic revision -m "Empty Init"

升级数据库到最新版本

alembic upgrade head

自动生成新版本:

alembic revision --autogenerate -m "Added Cookie model"

当然你也可以手动修改它。
一些常见的Alembic操作函数如下:

函数 说明
add_column Adds a new column
alter_column Changes a column type, server default, or name
create_check_constraint Adds a new CheckConstraint
create_foreign_key Adds a new ForeignKey
create_index Adds a new Index
create_primary_key Adds a new PrimaryKey
create_table Adds a new table
create_unique_constraint Adds a new UniqueConstraint
drop_column Removes a column
drop_constraint Removes a constraint
drop_index Drops an index
drop_table Drops a table
execute Run a raw SQL statement
rename_table Renames a table

注意:并不是所有的backend database都支持这些函数,比如SQLite不支持alter_column,drop_column

Controlling Alembic

查看现有数据库的迁移版本:

alembic current

显示历史

alembic history

版本降级

alembic downgrade 34044511331

手动修改数据库的迁移版本:

alembic stamp 2e6a6cc63e9

生成SQL

#Upgrading from 34044511331 to 2e6a6cc63e9  sql
alembic upgrade 34044511331:2e6a6cc63e9 --sql
alembic upgrade 34044511331:2e6a6cc63e9 --sql > migration.sql

更多参考这里


xbynet
1k 声望124 粉丝

不雨花犹落,无风絮自飞