天天看点

Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图

  • 知识图总览:注意进入项目虚拟环境后在执行迁移
    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图

1- 准备工作 使用orm创建原始表并添加数据

  • 终端连接数据库并做如下操作
    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图
  • Pycharm运行如下代码
    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    
    
    class Config(object):
        SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/author"
        SQLALCHEMY_TRACK_MODIFICATIONS = True
    
    app.config.from_object(Config)
    
    db = SQLAlchemy(app)
    
    
    class Author(db.Model):
        """作者"""
        __tablename__ = "tbl_authors"
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(32), unique=True)
    
    if __name__ == '__main__':
        db.drop_all()
        db.create_all()
    
        au_xi = Author(name='我吃西红柿')
        au_qian = Author(name='萧潜')
        au_san = Author(name='唐家三少')
        db.session.add_all([au_xi, au_qian, au_san])
        db.session.commit()
    
        app.run(debug=True)
               
  • 终端再次查看,发现已经有了表与数据
    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图

2- 执行数据库迁移 给原始表添加email字段 并关联模型类的orm映射

  • 原始代码更改为如下内容,文件命名为

    tt.py

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    
    from flask_script import Manager
    from flask_migrate import MigrateCommand, Migrate
    
    
    app = Flask(__name__)
    
    
    class Config(object):
        SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/author"
        SQLALCHEMY_TRACK_MODIFICATIONS = True
    
    app.config.from_object(Config)
    
    db = SQLAlchemy(app)
    manager = Manager(app)  # 创建启动命令管理对象
    
    Migrate(app, db)  # 创建数据库迁移工具对象
    manager.add_command("db", MigrateCommand)  # 向启动命令管理对象中添加迁移命令
    
    
    class Author(db.Model):
        """作者"""
        __tablename__ = "tbl_authors"
    
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(32), unique=True)
        email = db.Column(db.String(128), unique=True)  # 新增email字段
    
    if __name__ == '__main__':
        manager.run()  # 使用命令行方式启动
               
  • 终端中依次执行如下命令

    创建迁移仓库:

    python tt.py db init

    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图
    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图
    创建迁移脚本:

    python tt.py db migrate -m "initial migration"

    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图
    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图
    更新数据库:

    python tt.py db upgrade

    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图
    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图

3- 其余操作

  • 查看历史更新版本号:

    python tt.py db history

    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图
  • 回退数据库:

    python tt.py db downgrade c30da037d7ca

    Flask中模型类的数据库迁移操作Flask-Migrate和Flask-Script | 附知识图