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:\demo\migrations ...  done
Creating directory D:\demo\migrations\versions ...  done
Generating D:\demo\migrations\alembic.ini ...  done
Generating D:\demo\migrations\env.py ...  done
Generating D:\demo\migrations\README ...  done
Generating D:\demo\migrations\script.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:\demo\migrations\versions\11565ab73ab5_.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

 

posted @ 2020-11-21 12:33  后来者2012  阅读(137)  评论(0编辑  收藏  举报