由于模型中经常会新加一行或几行column (比如用来保存账户的确认状态),此时要修改 models.py,并执行一次新数据库迁移(能够保存之前的数据),Flask-Migrate可以实现这个功能。
from app import create_app, db
from flask_script import Manager, Shell
from flask_migrate import Migrate, MigrateCommand
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)
第一次使用:
1.初始化:(venv) python manage.py db init 这个命令会在项目下创建 migrations 文件夹,所有迁移脚本都存放其中。
2.创建第一个版本:(venv) $ python manage.py db migrate -m "initial migration" 检查migrations\versions,会新建一个版本.py,检查里面表格及字段
3.运行升级 (venv) $ python manage.py db upgrade,会把项目使用的数据库文件,更新为新的表格、字段,同时保留数据
以上操作会在项目目录下生成一个migration目录,以及数据库中新增一张version表。
后续数据库迁移:
python manage.py db migrate
python manage.py db upgrade
遇到的问题:
数据库无法迁移,报错如下:
alembic.util.exc.CommandError: Can't locate revision identified by 'a570bb807bff
问题原因:数据库版本对不上
解决方案:删除数据库中的version表,删除migration目录
来源:
https://stackoverflow.com/questions/20973145/cannot-complete-flask-migration