Flask 学习-15.flask-migrate数据迁移
前言
Flask-SQLAlchemy ORM 可以直接操作数据库,可以用db.create_all()
代码同步表到数据库。
当我们需要修改表的字段,比如对表新增字段,修改字段的时候需用到flask-migrate 插件来同步迁移数据。
flask-migrate 迁移数据
django 框架里面可以用migrate 命令进行数据库的同步,Flask 框架有个flask-migrate 插件可以实现类似功能。
通过命令行操作实现数据库的同步。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
# 设置数据库连接地址
DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/web'
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
# 是否追踪数据库修改,一般不开启, 会影响性能
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 是否显示底层执行的SQL语句
app.config['SQLALCHEMY_ECHO'] = True
# 初始化db,关联flask 项目
db = SQLAlchemy(app)
# 迁移组件初始化
Migrate(app, db)
# 创建模型
class Students(db.Model):
__tablename__ = 'students' # 数据库表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20))
fullname = db.Column(db.String(30))
nickname = db.Column(db.String(30))
def __repr__(self):
return f"<Students(name='{self.name}', fullname='{self.fullname}', nickname='{self.nickname}')>"
class Users(db.Model):
__tablename__ = 'user' # 数据库表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))
def __repr__(self):
return f"<Users(id='{self.id}', name='{self.name}')>"
执行迁移命令,先设置环境变量, 如果启动文件是app.py 这步可以省略。
set FLASK_APP=app.py # 设置环境变量指定启动文件
windows用set设置环境变量,linux 用export 设置环境变量
export FLASK_APP=app.py # 设置环境变量指定启动文件
执行相关命令
flask db init # 生成迁移文件夹 只执行一次
flask db migrate # ⽣成迁移版本, 保存到迁移文件夹中
flask db upgrade # 执行迁移
迁移命令
init 命令执行后,会生成migrations目录
flask db init
migrate 命令生成迁移脚本,保存到迁移文件夹中versions目录
flask db migrate
upgrade 命令执行迁移
flask db upgrade
执行完upgrade 命令才会在数据库中生成表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-08-24 python测试开发django-111.模型管理器(models.Manager)
2021-08-24 httprunner 3.x学习20 - jmespath取值特殊字符问题解决
2020-08-24 pytest文档48-切换 base_url 测试环境(pytest-base-url)