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