Flask框架 之Flask-Migrate数据库迁移


注意:flask_script与flask2.0不再兼容

一、安装 flask_migrate

pip install flask-migrate==2.5.3

二、示例代码

flask:1.0.2

flask-migrate:2.5.3

复制代码
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate, MigrateCommand

import os

class Config(object):
    ''' sqlalchemy 参数配置 '''
    # 配置数据库
    SQLALCHEMY_DATABASE_URI = 'mysql://test01:123456@127.0.0.1:3306/test01?charset=utf8'
    # 自动会追踪对象的修改并且发送信号
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 输出sql语句
    SQLALCHEMY_ECHO = True

    SECRET_KEY = os.urandom(24)

app = Flask(__name__)
app.config.from_object(Config)

db = SQLAlchemy(app)

migrate = Migrate(app=app, db=db)

manager = Manager(app)
manager.add_command("db", MigrateCommand)

#定义角色
class Role(db.Model):
    # 定义表名
    __tablename__ = 'roles'
    # 定义列对象
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(64), unique=True)
    age = db.Column(db.String(64), unique=True)
    users = db.relationship("User")


#定义用户
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))


@app.route("/")
def index():
    return "index"

if __name__ == '__main__':
    manager.run()
复制代码

三、命令操作

实际操作顺序:

1.python 文件 db init       创建迁移仓库

2.python 文件 db migrate -m"版本名(注释)"   创建迁移脚本

3.python 文件 db upgrade 然后观察表结构   更新数据库

4.根据需求修改模型

5.python 文件 db migrate -m"新版本名(注释)"

6.python 文件 db upgrade 然后观察表结构

7.若返回版本,则利用 python 文件 db history查看版本号

8.python 文件 db downgrade(upgrade) 版本号

 

错误:Error: Can’t locate revision identified by 'a1c25fe0fc0e’

解决:python app.py db revision --rev-id  a1c25fe0fc0e

如果你感觉有收获,欢迎给我打赏 ———— 以激励我输出更多优质内容,联系QQ:2575404985
        
posted @   样子2018  阅读(234)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2022-03-30 Vue 之vue-resource拦截器使用
2022-03-30 Vue 之使用Base64
点击右上角即可分享
微信分享提示

目录导航

一、安装flask_migrate
二、示例代码
三、命令操作