Flask-Migrate 已成功集成到项目中!
app.py- 已集成 Flask-Migratemanage.py- Flask CLI 管理脚本migrations/- 迁移脚本目录(自动生成)
由于数据库已经存在,需要标记为当前版本:
python3 manage.py db stamp head这会将现有数据库标记为"已迁移"状态。
# 1. 修改模型文件(比如 models/user.py)
# 2. 生成迁移脚本
python3 manage.py db migrate -m "添加email字段"
# 3. 查看生成的迁移脚本(可选)
# 编辑 migrations/versions/xxx_add_email.py
# 4. 执行迁移
python3 manage.py db upgrade
# ✅ 完成!python3 manage.py db currentpython3 manage.py db historypython3 manage.py db migrate -m "描述你的改动"python3 manage.py db upgrade# 回退到上一个版本
python3 manage.py db downgrade
# 回退到指定版本
python3 manage.py db downgrade <revision>python3 manage.py db show <revision># 1. 修改 models/user.py
class User(db.Model):
username = db.Column(...)
password = db.Column(...)
email = db.Column(db.String(120)) # 新增字段
# 2. 生成迁移
python3 manage.py db migrate -m "添加email字段到User表"
# 3. 执行迁移
python3 manage.py db upgrade# 1. 创建新模型 models/notification.py
class Notification(db.Model):
id = db.Column(...)
message = db.Column(...)
# 2. 在 models/__init__.py 中导出
from .notification import Notification
# 3. 生成迁移
python3 manage.py db migrate -m "添加Notification表"
# 4. 执行迁移
python3 manage.py db upgrade# 1. 修改模型
class Task(db.Model):
status = db.Column(db.Integer) # 从String改为Integer
# 2. 生成迁移
python3 manage.py db migrate -m "将Task.status改为Integer"
# 3. 检查生成的迁移脚本(可能需要手动调整数据转换逻辑)
# 4. 执行迁移
python3 manage.py db upgrade如果数据库已经存在(有数据),需要先标记:
python3 manage.py db stamp head在生产环境执行迁移前,务必备份数据库!
# SQLite 备份
cp instance/todolist.db instance/todolist.db.backup执行 migrate 后,检查生成的迁移脚本,确保:
- ✅ 没有遗漏的字段
- ✅ 数据转换逻辑正确(如果需要)
- ✅ 没有破坏性变更
在生产环境执行前,先在测试环境验证迁移脚本。
# 查看详细错误信息
python3 manage.py db upgrade --sql
# 手动检查迁移脚本
cat migrations/versions/<latest_revision>.py# 查看当前版本
python3 manage.py db current
# 手动标记版本
python3 manage.py db stamp <revision># ⚠️ 危险操作!仅在开发环境使用
rm -rf migrations/
python3 manage.py db init
python3 manage.py db migrate -m "初始迁移"
python3 manage.py db upgrade现在不再需要 db.create_all()!
迁移系统会自动管理数据库结构。
在 app.py 中,可以移除或注释掉:
# 旧方式(不推荐)
# with app.app_context():
# db.create_all()
# 新方式(推荐)
# 使用迁移系统:python3 manage.py db upgrade- 修改模型定义
- 生成迁移:
python3 manage.py db migrate -m "功能描述" - 检查迁移脚本
- 执行迁移:
python3 manage.py db upgrade - 测试功能
- 提交代码(包括迁移脚本)
- 备份数据库
- 拉取最新代码(包括迁移脚本)
- 执行迁移:
python3 manage.py db upgrade - 验证数据库结构
- 重启应用
# 查看所有可用命令
python3 manage.py db --help
# 查看特定命令帮助
python3 manage.py db migrate --help现在你可以:
- ✅ 安全地修改数据库结构
- ✅ 保留现有数据
- ✅ 追踪所有数据库变更
- ✅ 回滚错误的更改
开始使用吧!