Alembic 命令行
初始化
$ cd yourproject
$ alembic init alembic
创建一次 alembic
alembic revision -m "***"
upgrade / downgrade
alembic upgrade head # 升级到最新版本
alembic upgrade +2
alembic downgrade -1
alembic downgrade base # 回退到最开始的版本
获取 alembic 版本信息
alembic history
alembic current
alembic heads
alembic branches
自动生成
alembic revision --autogenerate -m "Added account table"
Alembic 语法
增加表
from alembic import op
import sqlalchemy as sa
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table(
'account',
sa.Column('id', sa.Integer()),
sa.Column('name', sa.String(length=50), nullable=False),
sa.Column('description', sa.VARCHAR(200)),
sa.Column('last_transaction_date', sa.DateTime()),
sa.PrimaryKeyConstraint('id')
)
公式:
op.create_table(<表名>, sa.Column(<列名>, *属性))
删除表
def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_table("account")
### end Alembic commands ###
公式:
op.drop_table(<表名>)
增加一列
from alembic import op
from sqlalchemy import Column,String
op.add_column('organization',
Column('name',String())
)
公式:
op.add_column(<表名>, Column(<列名>, *属性))
删除一列
op.drop_column('organization','name' )
公式:
op.drop_column(<表名>, <列名>)
修改列属性
op.alter_column('user', 'name', new_column_name='username',
existing_type=mysql.VARCHAR(length=20))
公式:
alter_column(<表名>, <旧列名>, new_column_name=<新列名>, existing_type=<旧字段类型>, type_=<字段类型修改后>)
注:当表中有数据时,修改字段类型无效或报错
分批处理
with op.batch_alter_table("some_table") as batch_op:
batch_op.add_column(Column('foo', Integer))
batch_op.drop_column('bar')
执行 SQL 语句
sql="""ALTER TABLE actions alter column finished_at type float;"""
conn=op.get_bind()
conn.execute(sql)
插入数据
# 在已有表内插入数据
from alembic import op
from sqlalchemy.sql import table,column
from sqlalchemy import String, Integer, Date
#Create an ad-hoc table to use for the insert statement.
accounts_table=table('test',
column('id',Integer),
column('name',String),
)
op.bulk_insert(accounts_table,
[
{'id':1,'name':'JohnSmith'},
{'id':2,'name':'EdWilliams'},
{'id':3,'name':'WendyJones'},
]
)
更新版本,但不操作实际的 upgrade 内容(慎用)
alembic stamp head