一周学会Flask3 Python Web开发-SQLAlchemy数据迁移migrate

锋哥原创的Flask3 Python Web开发 Flask3视频教程:

2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

模型类(表)不是一成不变的,当你添加了新的模型类,或是在模型类中添加了新的字段,甚至是修改了字段的名称或类型,都需要更新表。如果我们不在乎数据的话,可以删除表,然后重新生成新表。

在开发时,以删除表再重建的方式更新数据库简单直接,但明显的缺陷是会丢掉数据库中的所有数据。在生产环境下,你绝对不会想让数据库里的数据都被删除掉,这时你需要使用数据库迁移工具来完成这个工作。SQLAlchemy的开发者Michael Bayer写了一个数据库迁移工具------Alembic来帮助我们实现数据库的迁移,数据库迁移工具可以在不破坏数据的情况下更新数据库表的结构。蒸馏器(Alembic)是炼金术士最重要的工具,要学习SQL炼金术( SQLAlchemy),我们当然要掌握蒸馏器的使用。

我们安装下flask-Migrate库

复制代码
pip install flask-Migrate -i https://pypi.tuna.tsinghua.edu.cn/simple

然后创建migrate对象

复制代码
# 实例化Migrate
migrate = Migrate(app, db)

做数据迁移的时候,第一步就是要创建迁移环境

终端执行命令:

复制代码
flask db init

项目目录下会自动创建migrations目录及子文件。

接着StudentModle添加一个remark字段

我们执行生成下迁移脚本,-m是添加备注信息

复制代码
flask db migrate -m "t_student add remark  field"

versions目录下生成了迁移文件:

复制代码
"""t_student add remark  field

Revision ID: fa43fee367b2
Revises: 
Create Date: 2025-03-23 12:39:18.130872

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'fa43fee367b2'
down_revision = None
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('t_student', schema=None) as batch_op:
        batch_op.add_column(sa.Column('remark', sa.Text(), nullable=True))

    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('t_student', schema=None) as batch_op:
        batch_op.drop_column('remark')

    # ### end Alembic commands ###
复制代码

最后我们执行迁移文件,更新数据库,通过upgrade命令:

复制代码
flask db upgrade

执行完后,t_student表就多了remark字段:

相关推荐
雪芽蓝域zzs2 分钟前
第三十五节:Axios 统一错误拦截、401 Token 过期处理
前端·javascript·vue.js
sunshine22 girl3 分钟前
Java学习一 环境配置1 安装JDK,配置环境变量
java·开发语言·学习
XIE3927 分钟前
TipKit:开源富文本编辑器套件,一套逻辑,任意风格!
前端·笔记·开源
似水এ᭄往昔8 分钟前
【Qt】--常用控件(按钮类控件)
开发语言·qt
2601_962295998 分钟前
Spark 和 Kafka 实现 Python 大规模情感分析
python·spark·kafka·情感分析·大规模处理
计算机源码社12 分钟前
分享一个基于大数据的跨平台内容生态画像与互动等级分析系统,基于Hadoop+Spark的社交媒体互动数据可视化大屏分析
大数据·hadoop·python·机器学习·数据挖掘·spark·毕业设计
minhuan16 分钟前
基于Playwright数据采集,大模型对接Flask+SQLite,平滑升级向量库与分布式微服务26.5
人工智能·flask·大模型应用·大模型业务集成·微服务架构演进
砚底藏山河20 分钟前
行情工程实战 M01|存储选型 CSVSQLiteMySQL
java·python·金融·maven
范什么特西21 分钟前
一些常用名词
开发语言·前端·javascript
晴天1623 分钟前
前端打包工具全景解析
前端