Flask数据库中migrate扩展的使用

版权声明:FatPuffer https://blog.csdn.net/qq_42517220/article/details/88800613

安装依赖包

pip install Flask-Script
pip install flask-migrate

使用方法

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


app = Flask(__name__)

# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)

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

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

# 向manager对象中添加数据库操作命令
manager.add_command('db', MigrateCommand)

同步数据库

# 初始化,生成migrations文件夹
python db_demo.py db init

# 生成迁移文件
python db_demo.py db migrate

# 同步数据表
python db_demo.py db upgrade

示例演示

# coding:utf-8

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


app = Flask(__name__)


# create database db_flask default charset utf8 collate utf8_general_ci;

class Config(object):
    """配置参数"""
    SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/db_flask"
    # 设置sqlalchemy自动跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True

    SECRET_KRY = '#%*(_)?./DFVDjnd34534'


app.config.from_object(Config)

# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)


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

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

# 向manager对象中添加数据库操作命令
manager.add_command('db', MigrateCommand)

# 创建数据库模型类
class Role(db.Model):
    """用户角色表"""
    __tablename__ = 'tbl_roles'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    # 需要手动添加,方便使用Role.user查询用户对象,user列不是真实存在的,backref="role"为了方便通过User.role获取角色对象,
    # 因为使用User.role_id只能获取到角色id,要想获取角色对象,还需要再在Role表中查询一次
    users = db.relationship("User", backref="role")

    def __repr__(self):
        """定义之后,可以让显示对象的时候更直观,类似于Django中的__str__"""
        return "Rloe object: name=%s" % self.name

class User(db.Model):
    """用户表"""
    __tablename__ = 'tbl_users'  # 指明数据库表名
    id = db.Column(db.Integer, primary_key=True)  # 整型主键,会默认设置为自增主键
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(128), unique=True)
    password = db.Column(db.String(128), nullable=False)  # nullable=False 参数必须传
    role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id"))


if __name__ == '__main__':
    # 通过manager对象启动程序
    manager.run()

在这里插入图片描述

python db_demo.py db init

在这里插入图片描述

python db_demo.py db migrate

在这里插入图片描述

python db_demo.py db upgrade

在这里插入图片描述
在这里插入图片描述
生成迁移文件时添加说明信息:

python db_demo.py db migrate -m "XXXXXX"

查看历史纪录

python db_demo.py db history

回退

python db_demo.py db downgrade 版本编号(通过history查看) 

猜你喜欢

转载自blog.csdn.net/qq_42517220/article/details/88800613