Flask扩展:Flask-Migrate用法

Flask扩展:Flask-Migrate用法

1、介绍

引用官方文档的话,Flask-Migrate是使用Alembic迁移Flask应用程序的SQLAlchemy数据库的扩展,可以通过Flask命令行或者Flask-Script扩展对数据库进行操作。

该扩展主要用于迁移数据库。传统操作Flask数据库一般使用SQLAlchemy,表的初始化使用db.create_all,这种方式创建表之前需要先将原来表删除然后才能生成新的表结构。但是使用Flask-Migrate则免去这些繁琐的步骤。

第一次初始化数据库分为建立模型 -> 创建迁移文件 -> 创建表三个步骤,分别对应initmigrateupgrade三个命令。之后表的增删改则只需要后面两个步骤。三个步骤执行的详细内容如下,和git操作很相似:

  • init: 建立模型,会在同级目录下增加migrations文件夹,其中的versions文件夹为空;该步骤类似于git的仓库初始化(init)。
  • migrate: 根据项目中的数据库模型创建迁移文件,该步骤会在versions文件夹中增加内容;类似于gitaddcommit操作。
  • upgrade: 根据创建的迁移文件更新数据库;类似于gitpush操作。

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官方文档

你可能感兴趣的:(Flask学习笔记,flask,python,Flask-Migrate,数据库迁移)