zoukankan      html  css  js  c++  java
  • Flask-Migrate插件

    一. 插件介绍

    1. 在迭代开发过程中,当数据库中数据表发生变化时,需要进行数据库的迁移工作。

    2. Flask-Migrate插件的作用:在不破坏数据库已有数据的情况下更新数据库的表结构。

    3. Flask-Migrate基于Alembic(SQLAlchemy作者编写的数据库迁移工具)开发,并提供一些flask db命令来简化迁移工作。

    4. Flask-Migrate插件通常会结合Flask-Script插件一起使用

    二. 插件安装

    pip install flask
    pip install flask-sqlalchemy
    pip install flask-migrate pip install flask-script

    三. 插件用法

    3.1 Flask-Migrate插件的基本使用

    3.1.1 创建app.py文件

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/21 11:10
    # @Author  : chinablue
    # @File    : app.py
    
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app1.db'
    db = SQLAlchemy(app)
    
    Migrate(app, db)
    
    
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(128))
    
    
    if __name__ == '__main__':
        app.run()

    3.1.2 创建迁移仓库

    >>> flask db init

    3.1.2 创建迁移脚本

    >>> flask db migrate

    3.1.3 更新数据库

    >>> flask db upgrade

    3.2 与Flask-Script插件结合使用

    3.2.1 创建manager.py文件

    # -*- coding: utf-8 -*-
    # @Time    : 2020/11/21 12:14
    # @Author  : chinablue
    # @File    : manager.py
    
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    from flask_migrate import Migrate, MigrateCommand
    from flask_script import Manager
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app2.db'
    db = SQLAlchemy(app)
    
    # 初始化Flask-Migrate插件
    migrate = Migrate(app, db)
    
    # 将Flask-Migrate插件的实例对象注册到Flask-Script插件中
    manager = Manager(app)
    manager.add_command('db', MigrateCommand)
    
    
    class User(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(128))
    
    
    if __name__ == '__main__':
        manager.run()

    3.2.2 创建迁移仓库

    >>> python manager.py db init
    Creating directory D:demomigrations ...  done
    Creating directory D:demomigrationsversions ...  done
    Generating D:demomigrationsalembic.ini ...  done
    Generating D:demomigrationsenv.py ...  done
    Generating D:demomigrationsREADME ...  done
    Generating D:demomigrationsscript.py.mako ...  done
    Please edit configuration/connection/logging settings in 'D:\demo\migrations\alembic.ini' before proceeding.

    注意事项:

    1)db init命令一个项目中只需要执行一次

    2)执行db init命令后,项目根目录下会生成一个migrations文件夹

    3)当你单独使用Alembic进行数据迁移时,需要编写一些配置文件,而db init命令则会帮你自动生成好这些配置文件。

    3.2.3 创建迁移脚本

    >>> python manager.py db migrate
    INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
    INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    INFO  [alembic.autogenerate.compare] Detected added table 'user'
    Generating D:demomigrationsversions11565ab73ab5_.py ...  done

    注意事项:

    1)为创建的迁移脚本指定注释,使用-m参数:python manage.py db migrate -m "comment 123"

    2)自动创建的迁移脚本会根据model模型中的内容与当前数据库中的内容进行对比,进而生成迁移脚本

    3)因为Alembic无法检测到你对model模型做出的所有更改,所以在一些场景下,自动创建的迁移脚本不一定是完全正确的,需要自行对其检查校验。

    3.2.4 更新数据库

    >>> python manager.py db upgrade
    INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
    INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
    INFO  [alembic.runtime.migration] Running upgrade  -> 11565ab73ab5, empty message
  • 相关阅读:
    redis 中 发布订阅 的 数据类型
    excelExport.js 导出 excel 表格
    Go 出现:err is shadowed during return(err在返回过程中被隐藏)
    Go 服务端 向 firebase Android 端 fcm 信息
    Python全栈day 03
    Python全栈day 01
    开发流程与版本管理规范
    php 魔术常量
    sql 消除重复
    重置mysql密码
  • 原文地址:https://www.cnblogs.com/reconova-56/p/14013562.html
Copyright © 2011-2022 走看看