比如有一个简单的模型
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32), index=True)
一开始,username的长度限制在32,现在将其增大,比如说变为128,flask-migrate似乎不会检测到这个String变长的变化。
我使用了命令自动生成迁移脚本
python code.py db migrate -m "some comment"
python code.py db upgrade
之后,发现username的列的长度依旧被限制在32.
如何进行String长度的变化这种迁移?
黄舟2017-04-17 17:55:56
alembic支持检测字段长度改变,不过它不是默认的,需要配置。
设置compare_type
为True
可以检查出类型字段的改变比如字段长度,设置compare_server_default
可以检查出设置的字段默认值的改变。
详细参考文档
怪我咯2017-04-17 17:55:56
flask-migrate是不会检测列的修改的,但可以这样做
先在User下加一行,然后migrater后,再作修改,把之前增加的行删除,然后再加几行,要注意的是sqlite下不一定能行得通
python code.py db edit
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.alter_column('users', 'username', existing_type=sa.String(32), type_=sa.String(128))
### end Alembic commands ###
def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.alter_column('users', 'username', existing_type=sa.String(128), type_=sa.String(32))
### end Alembic commands ###
参考
http://alembic.readthedocs.io/en/latest/ops.html