FlaskMigrate使用指南
Flask-Migrate 是一个与 Flask 和 SQLAlchemy 一起使用的扩展,提供了对数据库 schema 迁移的支持。它基于 Alembic,这是一种用于处理数据库 schema 变更的工具。
安装 Flask-Migrate
首先,安装 Flask 、mysql-connector-python 、Flask-SQLAlchemy 和 Flask-Migrate:
pip install Flask mysql-connector-python Flask-SQLAlchemy Flask-Migrate
配置 Flask 应用
设置你的 Flask 应用来使用 SQLAlchemy 和 Flask-Migrate:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
import os
app = Flask(__name__)
# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://username:password@hostname/test'
# 初始化 SQLAlchemy
db = SQLAlchemy(app)
# 初始化 Flask-Migrate
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
if __name__ == '__main__':
app.run(debug=True)
设置迁移环境
在你的项目根目录下初始化迁移环境。这会创建一个
migrations
目录来存放迁移脚本和配置文件:
flask db init
创建迁移脚本
当你对模型进行了更改(例如,添加新模型或修改现有模型)时,可以生成迁移脚本。这个命令会自动检测你的模型变化并生成相应的迁移脚本:
flask db migrate -m "init or other description"
应用迁移
将迁移应用到数据库中:
flask db upgrade
这个命令会运行所有还未应用的迁移脚本,将数据库 schema 更新到最新状态。
其他常用命令
回滚迁移:将数据库回滚到上一个版本:
flask db downgrade
查看当前迁移状态:显示当前数据库的迁移版本:
flask db current
生成降级迁移脚本:生成回滚上一次迁移的脚本(如果没有自动生成的话):
flask db downgrade -m "your description"
一个完整的示例
假设你的应用名称是
example
:
1. 初始化项目结构
项目结构如下:
example/
app.py
migrations/
2. 创建 app.py
文件
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
# 配置数据库 URI
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://username:password@hostname/test'
# 初始化 SQLAlchemy
db = SQLAlchemy(app)
# 初始化 Flask-Migrate
migrate = Migrate(app, db)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
if __name__ == '__main__':
app.run(debug=True)
3. 初始化迁移环境
在项目根目录下运行:
flask db init
4. 创建初始迁移脚本
flask db migrate -m "initial migration"
5. 应用初始迁移
flask db upgrade
第二次升级步骤
每次你对模型进行更改后:
创建新的迁移脚本:
flask db migrate -m "add new field"
应用迁移:
flask db upgrade
通过上述步骤,你可以轻松管理和应用数据库 schema 的变化,确保数据库与模型保持一致。Flask-Migrate 的命令行工具使得迁移管理变得非常方便和高效。
常见问题
- 执行
flask db migrate -m "your description"
无法生成升级脚本确保你的模型类已导入到
app.py
文件中,否则 Flask-Migrate 无法检测到模型变化。
另外,确保你的数据库连接配置正确,包括数据库名称、用户名、密码等。
假如表结构在 models 目录下,请确保你的 models 目录已添加到app.py
文件中。比如import models as models