【flask扩展】Flask-Migrate的使用

个人简介

  • 作者简介:大家好,我是阿牛,全栈领域新星创作者。
  • 支持我:点赞+收藏⭐️+留言
  • 系列专栏:flask框架快速入门
  • 格言:要成为光,因为有怕黑的人!
    请添加图片描述

前些天发现了一个比较好的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。

点击跳转到网站:人工智能学习

目录

    • 个人简介
  • 前言
    • 安装
    • 使用
      • 创建迁移仓库(migrations目录)
      • 读取类的内容, 生成版本文件
      • 更新数据库
      • 回退数据库
  • 结语

前言

在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。
更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。我们在django中可以通过指令迁移数据库,将模型类映射到数据库中,在flask中我们用的扩展Flask-SQLAlchemy来生成模型类,还需要数据库迁移扩展来通过指令迁移数据库!
在 Flask 中可以使用 Flask-Migrate 扩展,来实现数据迁移。并且集成到 Flask-Script 中,所有操作通过命令就能完成。
为了导出数据库迁移命令, Flask - Migrate 提供了一个 Migratecommand 类,可以附加到 flask - script 的 manager 对象上。

安装

pip install flask-migrate==2.7.0

这里用版本2.7.0,不能再高了,高版本源码里没有MigrateCommand ,我们无法导入!

使用

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand

app = Flask(__name__)

# 创建flask脚本管理工具对象
manager = Manager(app)

#从配置文件中settings加载配置
app.config.from_pyfile('settings.py')

# 实例化模型类对象,将app中的数据库配置加载进去
db = SQLAlchemy(app)

# 创建数据库迁移工具对象,第一个参数是flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)

# 向manager中添加数据库的操作指令,manager是Flask_Script的实例,这条语句在flask_Script中添加一个db命令
manager.add_command("db",MigrateCommand)

# 创建数据库模型类

# 用户表
class User(db.Model):
    __tablename__ = "flask_users"  #指明数据库的表名
    id = db.Column(db.Integer,primary_key=True)  #主键,默认自增
    name = db.Column(db.String(30),unique=True,nullable=False)
    email = db.Column(db.String(50),unique=True)
    password = db.Column(db.String(60))
    role_id = db.Column(db.Integer,db.ForeignKey("flask_roles.id"))
    # 外键,对应角色表的id(是从底层数据库角度考虑的)


# 角色表
class Role(db.Model):
    __tablename__ = "flask_roles"
    id = db.Column(db.Integer, primary_key=True)  # 主键,默认自增
    name = db.Column(db.String(30),unique=True,nullable=False)
    users = db.relationship("User",backref="role")


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

创建迁移仓库(migrations目录)

python app.py db init

【flask扩展】Flask-Migrate的使用_第1张图片
执行该命令后会在项目目录下生成migrations目录

读取类的内容, 生成版本文件

没有真正在数据库中添加或删除!

python app.py db migrate -m “提示信息”

【flask扩展】Flask-Migrate的使用_第2张图片

更新数据库

python app.py db upgrade

在这里插入图片描述
执行该指令后,我们的数据库才会发生变化!

【flask扩展】Flask-Migrate的使用_第3张图片

回退数据库

回退数据库时,需要指定回退版本号,由于版本号是随机字符串,为避免出错,建议先使用 python app.py db history 命令查看历史版本的具体版本号,然后复制具体版本号执行回退。

查看改变的历史状态

python manager.py db history

返回指定的版本状态

python manager.py db downgrade 版本号

这里我不再演示,就像你对某个模型类加了个属性(也就是对数据库中的表加了一个字段),那么这时你用指令python app.py db upgrade更新数据库后会生成一个新的版本,是可以回退到旧版本的!

【flask扩展】Flask-Migrate的使用_第4张图片
如图,migrations目录中versions放的就是版本信息!

结语

最后,我在博客案例中将flkask-script脚本管理和flask主文件app.py没有分离,在项目中我们应该像django一样,专门有一个manage.py文件来管理整个项目!此时指令也就和django一样了,都是python manage.py …

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

系列专栏
软磨 css
硬泡 javascript
前端实用小demo

你可能感兴趣的:(flask框架快速入门,flask,python,后端)