今天看啥  ›  专栏  ›  友仁恒敬

Flask Migrate 数据库版本控制

友仁恒敬  · 简书  ·  · 2020-02-01 16:07

在开发中,由于需求变化,经常要变换表结构,手动更新十分不变,且项目一大后,不容易管理,通过数据库的版本控制,可以方便管理。这是flask migrate的作用。

1 安装 pip install flask_migrate flask_script

2 代码结构

migrate.py # migrate 主程序
config.py # app 配置参数
models/user.py # user表
           /post.py # post 表
exts/db.py # flask SQLAlchemy, 便于模块化,所以独立放在在exts目录下

3 代码说明

  • migrate.py
from flask import Flask
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from exts.db import db
from config import Config

app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
# 初始化 migrate
# 两个参数一个是 Flask 的 app,一个是数据库 db
migrate = Migrate(app, db)
# 初始化管理器
manager = Manager(app)
# 添加 db 命令,并与 MigrateCommand 绑定
manager.add_command('db', MigrateCommand)

# 导入model
from models.user import User
# 打开注释,重新migrate,查看效果
#from models.post import Post 

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

config.py

import os
class Config(object):
    BASE_DIR = os.path.abspath(os.path.dirname(__file__))
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'you#will#never#guess'
    MYSQL = 'mysql+mysqldb://dev:12345@localhost:3306/test'  # dialect client pymysql,mysqldb
    JSON_AS_ASCII = False  # return chinese unicode to show readable words.
    SQLALCHEMY_BINDS = {
        "test": MYSQL,
    }
    SQLALCHEMY_DATABASE_URI = MYSQL # 默认db session dialect
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_POOL_RECYCLE = 299 # db 失效时间

user.py

from exts.db import db
class User(db.Model):
    __bind_key__ = 'test'
    __tablename__='user'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    #avatar = db.Column(db.String(128)) # 打开注释后,运行migrate后看效果
    #gender = db.Column(db.Boolean) # 同上

post.py

from exts.db import db
class Post(db.Model):
    __bind_key__ = 'test'
    __tablename__= 'post'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(128))

5 运行migrate命令

1. python migrate.py db init # 初始化版本库
2. python migrate.py db migrate -m '第一个版本'
3. python migrate.py db upgrade  # 提交版本
4. 修改models中的属性,再重复2和3
5. python migrate.py db downgrade # 回退版本

可以看到很方便的控制model的更新



原文地址:访问原文地址
快照地址: 访问文章快照