您的位置:首页 > 编程语言 > Python开发

Python Flask学习_使用Flask-Migrate实现数据库迁移

2018-06-23 10:07 846 查看

在开发过程中,有时需要 修改数据库模型,修改之后还需要更新数据库。使用SQLAlchmey更新数据库表,只能删除旧表,新建新表,数据也会丢失。

因此,SQLAlchemy编写了一个迁移框架:Alembic,除了直接使用Alembic外。还可以使用Flask-Migrate集成到Flask-Scriot中,所有操作都通过Flask-Script命令完成。

一、将MigrateCommand类添加到manager对象上

# manager.py

import os
from app import create_app, db
from app.models import User,Role
from flask_script import Manager,Shell
from flask_migrate import Migrate, MigrateCommand

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app,db)                    #

def make_shell_context():
return dict(app=app, db=db, User=User, Role=Role)
manager.add_command('shell',Shell(make_context=make_shell_context))                 #为python manager.py 添加启动选项
manager.add_command('db',MigrateCommand)                                            #添加命令

if __name__=='__main__':
manager.run()

二、创建迁移仓库

这个命令创建了migrations文件夹,所有的迁移脚本放在里面。


其中,versions目录下面的.py文件是不同的版本。如果需要从旧迁移脚本升级到新迁移脚本,只需跳到四:根据迁移脚本更新数据库。

三、创建迁移脚本 

在Alembic(Flask-Migrate)中 ,数据库迁移用迁移脚本表示 。脚本中有两个函数,分别是upgrade()和downgrade()。

upgrade():把迁移中的改动应用到数据库中;

downgrade():将改动删除。

创建迁移脚本有两种方式:手动和自动

手动:使用revision命令手动创建迁移脚本,创建的只是骨架,upgrade()和downgrade()函数都是空的,需要手动填写 。

自动:migrate子命令用来自动创建迁移脚本。根据模型定义和数据库当前状态之间的差异生成upgrade()和downgrade()函数的内容。(自动创建的迁移脚本不一定正确,有可能会漏掉一些 细节 ,因此一定要检查 )



四、根据迁移脚本更新数据库








阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: