Flask数据库迁移

本文介绍如何使用 Flask-Migrate 扩展进行数据库迁移,包括安装配置、创建迁移脚本及更新数据库等步骤,适用于需要频繁调整数据库模型的 Flask 应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程中,需要修改数据库模型,⽽且还要在修改之后更新数据库。最直接的⽅式就是删除
旧表,但这样会丢失数据。
更好的解决办法是使⽤数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应⽤到数据
库中。
在Flask中可以使⽤Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通
过命令就能完成。
为了导出数据库迁移命令,Flask-Migrate提供了⼀个MigrateCommand类,可以附加到flask-script

的manager对象上。

先要在虚拟环境中安装Flask-Migrate。
pip install flask-migrate

代码内容如下:
#coding=utf-8
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)
#第⼀个参数是Flask的实例,第⼆个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)
#manager是Flask-Script的实例,这条语句在flask-Script中添加⼀个db命令
manager.add_command('db',MigrateCommand)
#定义模型Role
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')
数据库迁移
107
#repr()⽅法显示⼀个可读字符串,
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) 版本号



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值