alembic使用

1
flask官方对sqlachemy提供了一个类似django的迁移工具,这个迁移工具的名字就是alembic

安装

1
pip install alembic

初始化项目

1
alembic init 仓库名

修改对应文件

1
2
3
4
5
6
7
8
9
10
根路径下alembic.ini
找到下面那行并修改为你对应数据库的url
url:sqlalchemy.url = mysql+pymysql://root:admin@localhost/alembic_demo

项目下env.py
找到下面这行,修改为你models.py中的 sqlachemy.metadata
target_metadata = None
eg:
from animation.db.models import db
target_metadata = db.metadata

进行数据迁移

1
2
3
4
#生成迁移文件
alembic revision -m "first commit" # -m为message
#进行迁移
alembic upgrade head

版本回滚

1
2
3
4
alembic downgrade 版本号

#版本号查看命令
alembic history

数据库对应操作

建表

1
2
3
4
5
6
7
op.create_table(
"table_name", # 表名
sa.Column('column_name1', sa.Integer, primary_key=True, autoincrement=True, nullable=False),
sa.Column('column_name2', sa.Integer, nullable=False),
sa.Column('column_name3', sa.DATETIME, nullable=False),
sa.Column('column_name4', sa.Float, nullable=False)
)

数据类型:sa.DATETIME, sa.Integer, sa.Float, sa.String(45), sa.String(255)等

删表

1
op.drop_table('table_name')

修改某一列的属性

1
2
3
4
5
6
7
op.alter_column(
table_name='table_name',
column_name='old_column_name',
new_column_name='new_column_name',
type_=sa.String(255),
existing_type=sa.DATETIME, nullable=False
)

加一列

1
2
3
4
op.add_column(
'table_name',
sa.Column('new_column_name', sa.String(45), nullable=True)
)

删除一列

1
op.drop_column('table_name', 'column_name')