Essential SQLAlchemy2th学习笔记之Alembic数据库迁移

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_columnAdds a new column
alter_columnChanges a column type, server default, or name
create_check_constraintAdds a new CheckConstraint
create_foreign_keyAdds a new ForeignKey
create_indexAdds a new Index
create_primary_keyAdds a new PrimaryKey
create_tableAdds a new table
create_unique_constraintAdds a new UniqueConstraint
drop_columnRemoves a column
drop_constraintRemoves a constraint
drop_indexDrops an index
drop_tableDrops a table
executeRun a raw SQL statement
rename_tableRenames 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
    原文地址: https://segmentfault.com/a/1190000007838277
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞