本文共 1259 字,大约阅读时间需要 4 分钟。
from flask_migrate import Migrate, MigrateCommand#...migrate = Migrate(app, db)manager.add_command('db', MigrateCommand) #集成python shell, 见上节,效果如下:
&python hello.py db init #执行此行命令后, flasky文件夹多处一个migrations文件夹
class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) age = db.Column(db.Integer, unique=True) #添加一个age列 def __repr__(self): return '五. 创建迁移脚本' %self.username
&python hello.py db migrate #执行此命令后, migrations文件夹中的versions文件夹中多出一个py迁移脚本, 里面有两个函数upgrade和downgrade
upgrade里面是我们所作的修改, 在users表中增加age列, downgrade里面是删除此次修改, 删除此次修改的代码是错的,因为这是自动生成的迁移脚本, 难免出现错误, 正确代码应该是:
with op.batch_alter_table('users') as batch_op: batch_op.drop_column('age')六. 把迁移应用到数据库中
&python hello.py db upgrade
此时我们可以看到, users表中增加了属性列age:
&python hello.py db downgrade
注意:如果在操作过程中遇到类似错误——sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) duplicate column name: age [SQL: u'ALTER TABLE users ADD COLUMN age INTEGER']
需要修改数据库中的albmic_version中的version_num属性为最近更新过的迁移版本的代号, 也就是迁移脚本的文件名(无后缀), 注意不加下划线。