美文网首页
Flask Migrate 数据库版本控制

Flask Migrate 数据库版本控制

作者: 友仁恒敬 | 来源:发表于2020-02-01 16:07 被阅读0次

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

    相关文章

      网友评论

          本文标题:Flask Migrate 数据库版本控制

          本文链接:https://www.haomeiwen.com/subject/wakxxhtx.html