sqlalchemy数据库迁移

当我们给一张表添加或删除字段时,迁移数据库可以直接使用db.drop_all(),db.created_all() 生成新数据库,但是这会删除数据库所有信息。使用Flask-Migrate实现数据库迁移可以保留数据信息。

首先需要下载运行环境flask_migrate和alembic包

在flask项目工作路径下cmd命令 

alembic init alembic #生成初始仓库,第二个alembic为仓库名

 

此时会在flask项目的数据库内生成一张表alembic_version,表内数据表示当前的数据库迁移版本。同时flask项目的文件夹内会生成一个alembic文件夹及alembic.ini文件

打开alembic.ini文件修改sqlchemy.url参数为flask项目的设置的数据库配置信息

sqlalchemy.url = mysql+pymysql://root:root@127.0.0.1:3306/test1

修改alembic文件夹内env.pu

  • 添加路径
import os
import sys
import app
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
  • 修改参数target_metadata
target_metadata = app.db.Model.metadata  #app 为flask的项目,db为Sqlalchemy的实例化对象

cmd命令,生成版本,在alembic文件夹下version会生成具体的版本信息,

alembic revision --autogenerate -m "first commit" #"first commit"可自定义
# 生成数据库版本,文件名为版本号+"first commit"

切换版本

alembic downgrate  head #回退上一个版本
alembic downgrate 版本号 #回退具体版本
alembic upgrate  head #更新版本
alembic upgrate 版本号 #更新具体版本

错误处理:

输入:alembic revision --autogenerate -m "first commit"
出现错误:FAILED: Targetdatabase is not up todate
解决方法:输入alembic upgrate head 更新数据库版本
更新或回退版本时
错误:FAILED: Can’t locaterevision identified by’xxx’
解决方法:
删除数据库表alembic_version内的版本信息,
如果还不行,则删除almebic所有文件重新初始化,记得删除alembic_version内的信息

 

除了使用alembic命令外,还可以使用flask命令集创建。

from flask_migrate import Migrate
db = Sqlalchemy()
migrate = Migrate(app,db) #添加这条命令

flask项目路径下cmd命令:

flask db init #创建一个迁移环境

生成迁移脚本:

flask db migrate -m 

更新或回退版本:

flask db upgrate/downgrate

注意:

生成的迁移脚本可能发生错误,需要手动修订

 


 

posted @ 2021-10-19 10:26  一笔一划82  阅读(861)  评论(0)    收藏  举报