天天看点

Flask扩展:Flask-Migrate用法Flask扩展:Flask-Migrate用法

Flask扩展:Flask-Migrate用法

1、介绍

引用官方文档的话,

Flask-Migrate

是使用

Alembic

迁移Flask应用程序的

SQLAlchemy

数据库的扩展,可以通过Flask命令行或者

Flask-Script

扩展对数据库进行操作。

该扩展主要用于迁移数据库。传统操作Flask数据库一般使用

SQLAlchemy

,表的初始化使用

db.create_all

,这种方式创建表之前需要先将原来表删除然后才能生成新的表结构。但是使用

Flask-Migrate

则免去这些繁琐的步骤。

第一次初始化数据库分为

建立模型 -> 创建迁移文件 -> 创建表

三个步骤,分别对应

init

migrate

upgrade

三个命令。之后表的增删改则只需要后面两个步骤。三个步骤执行的详细内容如下,和

git

操作很相似:

  • init

    : 建立模型,会在同级目录下增加

    migrations

    文件夹,其中的

    versions

    文件夹为空;该步骤类似于

    git

    的仓库初始化(

    init

    )。
  • migrate

    : 根据项目中的数据库模型创建迁移文件,该步骤会在

    versions

    文件夹中增加内容;类似于

    git

    add

    commit

    操作。
  • upgrade

    : 根据创建的迁移文件更新数据库;类似于

    git

    push

    操作。

2、安装

Flask-Migrate

sudo pip install flask-migrate
           

没有安装

Flask

或者Flask的

Flask-SQLAlchemy

扩展,使用以下指令安装:

sudo pip install flask
sudo pip install flask-sqlalchemy
           

3、代码示例

Flask命令行操作

引用官方的示例代码:

# 注意:如果数据模型和操作函数不在同一个文件下,需要引用数据模型,否则不会创建
# 例如你的用户模型在 models/User.py 中,需要在调用前增加下述类似代码
# from app.models import User
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)

# 数据库连接配置
# 'mysql+pymysql://root:<你的密码>@<主机地址>/<数据库名>?charset=utf8'
# 上述为博主使用的配置,使用的是mysql数据库,使用前需要安装pymysql,否则会报错,安装指令如下:
# sudo pip install pymysql
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

# 初始化数据库
db = SQLAlchemy(app)
# 初始化Flask-Migrate扩展
migrate = Migrate(app, db)

# 示例数据库模型
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
           

使用下述命令建立模型:

flask db init
           

接着是创建迁移文件:

flask db migrate
           

最后是更新数据库:

flask db upgrade
           

通过上面三个步骤,就完成了第一次迁移数据库操作,使用下述指令查看使用帮助:

flask db --help
           

结合

Flask-Script

操作

安装

Flask-Script

sudo pip install flask-script
           

示例代码如下,在上面使用代码的基础上增加

Flask-Script

的相关操作即可:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

app = Flask(__name__)
# 注意替换成自己的数据库连接方式
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

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()
           

然后几个操作步骤为:

python manage.py db init
python manage.py db migrate
python manage.py db upgrade
python manage.py db --help
           

4、拓展进阶

Flask-Migrate

支持多数据库,可以和

Flask-SQLAlchemy

的绑定功能结合,从而可以跟踪与应用程序关联的多个数据库的迁移。

创建支持多数据库的存储仓库,需要在

init

后增加

--multidb

参数,示例命令如下:

flask db init --multidb
           

【参考链接】

  • 掘金-flask学习笔记之flask-migrate
  • Flask-Migrate官方文档