flask入门到起飞(九)数据库迁移和Flask-Migrate库使用

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

#首先要在虚拟环境中安装Flask-Migrate。
pip install flask-migrate
#同时迁移库还依赖与flask-script
pip install flask-script

配置实例:

# coding:utf-8

from flask import Flask, render_template, request, redirect, url_for, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_script import Manager
from flask_migrate import MigrateCommand, Migrate

app = Flask(__name__)

class Config(object):
    # sqlalchemy的配置参数
    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/book"

    # 设置sqlalchemy自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True

    SECRET_KEY = "12334455555sssss222ss"

app.config.from_object(Config)

db = SQLAlchemy(app)

# 创建启动命令管理对象
manager = Manager(app)

# 创建数据库迁移工具对象
Migrate(app, db)

# 向启动命令管理对象中添加迁移命令
manager.add_command("db", MigrateCommand)


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

创建迁移仓库

#创建migrations文件夹,所有迁移文件都放在里面。
python database.py db init

更新数据库

python database.py db upgrade

回退数据库

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

你可能感兴趣的:(flask入门到起飞(九)数据库迁移和Flask-Migrate库使用)