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
注意:
生成的迁移脚本可能发生错误,需要手动修订

浙公网安备 33010602011771号