【Flask 数据库 操作】数据库迁移

alembic

pip install alembic

初始化仓库

使用alembic创建一个仓库(初始化仓库)

  • 打开dos系统界面;
  • cd到当前项目目录中,注意:如果想要使用alembic,则需要先进入到安装了alembic的虚拟环境中,不然就找不到这个命令;
  • 然后执行命令 “alembic init [仓库的名字,推荐使用alembic]”;

第一次执行upgrade的时候,就会在数据库中创建一个名叫alembic_version表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。

修改配置文件

在 alembic.ini 中,给 sqlalchemy.url 项设置数据库的连接方式。方式跟sqlalchemy的方式是一样的。
为了使用模型类更新数据库,需要在 alembic/env.py 文件中设置target_metadata项,默认为target_metadata=None。需要将 target_metadata 的值设置为模型 Base.metadata ,但是要导入 models使用sys模块和os模块把当前项目的路径导入到path中:

# alembic.ini 
sqlalchemy.url = driver://user:pass@localhost/dbname

# alembic/env.py
import sys,os
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import Base
target_metadata = Base.metadata

执行脚本

  • 自动生成迁移文件:

alembic revision --autogenerate -m "提示信息" 将当前模型中的状态生成迁移文件。

  • 将生成的迁移文件映射到数据库中

使用alembic upgrade head将刚刚生成的迁移文件,真正映射到数据库中。
同理,如果要降级,那么使用alembic downgrade head

常用alembic命令和参数解释

  • init:创建一个alembic仓库。
  • revision:创建一个新的版本文件。
    • autogenerate:自动将当前模型的修改,生成迁移脚本。
    • m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾.
  • upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。
    • [head]:代表最新的迁移脚本的版本号。
    • downgrade:会执行指定版本的迁移文件中的downgrade函数。
    • heads:展示head指向的脚本文件版本号。
    • history:列出所有的迁移版本及其信息。
    • current:展示当前数据库中的版本号。

常见问题

FAILED: Target database is not up to date

> 主要是heads和current不相同。current落后于heads的版本,将current移动到head上,`alembic upgrade head`

KeyError: ‘3242343224324’ 或者 FAILED:Can’t locate revision identified by ‘3242343224324’

数据库中存的版本号不在迁移脚本文件中,删除versions中所有的迁移文件,删除数据库所有表

Flask-SQLAlchemy和alembic结合使用

主要区别于配置不同,alembic/env.py 文件中设置target_metadata项,使用db.Model.metadata


import sys,os 
sys.path.append(os.path.dirname(os.path.dirname(__file__ )))
target_metadata = db.Model.metadata

Flask-Migrate

flask-migrate是flask的一个扩展模块,主要是扩展数据库表结构的。flask-migrate是基于Alembic进行的一个封装,并集成到Flask中,所有的迁移操作其实都是Alembic做的,他能跟踪模型的变化,并将变化映射到数据库中.
pip install flask-migrate

# 创建Migrate(app,db)对象
Migrate(app,db)

常用操作

  • 创建迁移仓库
    这个命令会创建migrations文件夹,所有迁移文件都放在里面。

flask db init

  • 生成脚本文件

flask db migrate

  • 更新数据库

flask db upgrade

  • 返回以前的版本

flask db downgrade version_

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值