- 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。
- 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。
- 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。
- 为了导出数据库迁移命令,Flask-Migrate提供了一个MigrateCommand类,可以附加到flask-script的manager对象上。
首先要在虚拟环境中安装Flask-Migrate。
| pip install flask-migrate |
| |
| from flask import Flask |
| |
| from flask_sqlalchemy import SQLAlchemy |
| from flask_migrate import Migrate,MigrateCommand |
| from flask_script import Shell,Manager |
| |
| app = Flask(__name__) |
| manager = Manager(app) |
| |
| app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Flask_test' |
| app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True |
| app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True |
| db = SQLAlchemy(app) |
| |
| |
| migrate = Migrate(app,db) |
| |
| |
| manager.add_command('db',MigrateCommand) |
| |
| |
| class Role(db.Model): |
| |
| __tablename__ = 'roles' |
| |
| id = db.Column(db.Integer, primary_key=True) |
| name = db.Column(db.String(64), unique=True) |
| user = db.relationship('User', backref='role') |
| |
| |
| def __repr__(self): |
| return 'Role:'.format(self.name) |
| |
| |
| class User(db.Model): |
| __talbe__ = 'users' |
| id = db.Column(db.Integer, primary_key=True) |
| username = db.Column(db.String(64), unique=True, index=True) |
| |
| role_id = db.Column(db.Integer, db.ForeignKey('roles.id')) |
| |
| def __repr__(self): |
| return 'User:'.format(self.username) |
| |
| |
| if __name__ == '__main__': |
| manager.run() |
创建迁移仓库
| #这个命令会创建migrations文件夹,所有迁移文件都放在里面。 |
| python database.py db init |
![创建迁移仓库]()
创建迁移脚本
- 自动创建迁移脚本有两个函数
- upgrade():函数把迁移中的改动应用到数据库中。
- downgrade():函数则将改动删除。
- 自动创建的迁移脚本会根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数的内容。
- 对比不一定完全正确,有可能会遗漏一些细节,需要进行检查
| python database.py db migrate -m 'initial migration' |
![创建迁移脚本]()
更新数据库
| python database.py db upgrade |
返回以前的版本
可以根据history命令找到版本号,然后传给downgrade命令:
| python app.py db history |
| |
| 输出格式:<base> -> 版本号 (head), initial migration |
| python app.py db downgrade 版本号 |
实际操作顺序:
- 1.python 文件 db init
- 2.python 文件 db migrate -m"版本名(注释)"
- 3.python 文件 db upgrade 然后观察表结构
- 4.根据需求修改模型
- 5.python 文件 db migrate -m"新版本名(注释)"
- 6.python 文件 db upgrade 然后观察表结构
- 7.若返回版本,则利用 python 文件 db history查看版本号
- 8.python 文件 db downgrade(upgrade) 版本号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?