9. Flask-Migrate

项目进行当中,经常会改动数据库,如何安全有效即使的跟踪数据库的变动,Flask-Migrate应运而生。

有了Flask-Migrate,我们就可以不用手写一行SQL代码就可以直接创建,修改数据库。

据传Flask-Migrate插件使用过程当中可能会有bug,在使用的时候要小心下,当今时代,礼崩乐坏,除了亲娘,别的什么都可能有假呀!

9.1. 安装

使用pip安装就可以:

pip install Flask-Migrate

9.2. 使用

Flask-Migrate的使用大致分两部分:

  • 在程序中使用插件
  • 在命令行中,借助 Flask-Script 进行数据库的迁移操作

9.2.1. 在代码中使用Flask-Script

代码中使用Flask-Script插件只需要两步就可以:

    from flask import Flask #  导入个包包
    from flask_sqlalchemy import SQLAlchemy
    # flask_migrate 需要借助 flask_script
    from flask_script import Manager

    # 第一步:导入
    from flask_migrate import Migrate, MigrateCommand

    app = Flask(__name__)

    # 用户tuling,密码123456, 数据库位置/访问端口/数据库名=127.0.0.1:3306/tuling
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://tuling:123456@127.0.0.1:3306/tuling'

    db = SQLAlchemy(app)
    manager = Manager(app)

    # 第二步:初始化
    Migrate(app=app, db=db)
    # 第三步:添加相应命令
    manager.add_command('db', MigrateCommand)

    class Teacher(db.Model):

        __tablename__ = 'teacher'

        id = db.Column(db.Integer, primary_key=True, autoincrement=True)
        name = db.Column(db.String(50), unique=True)
        email = db.Column(db.String(100))
        pwd = db.Column(db.String(50))

        def __str__(self):
            return self.name

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

9.2.2. 使用命令行进行数据库迁移

使用命令行对数据库进行迁移分成三部分:

  • python xxx.py  db init: 初始化数据库
  • python xxx.py db migrate: 创建迁移
  • python xxx.py db upgrade: 执行迁移 期间当前文件夹下会生成migrations文件夹,具体迁移文件和信息会自动放入这个文件夹中。
  1. 执行迁移前文数据库内容:
    beformig
  2. 执行初始化命令 initmig
  3. 准备迁移 miging
  4. 执行迁移 miged
  5. 钱以后数据库 aftermig