FastAPI + Tortoise-ORM + Aerich 实现数据库迁移管理(MySQL 实践)

在 FastAPI 项目中,Tortoise-ORM 是一个轻量的异步 ORM 框架,适用于 async/await 场景。结合数据库迁移工具 Aerich,可以优雅地管理数据库表结构演进,本文将通过完整流程演示如何在 MySQL 环境下使用。


📦 一、环境准备

确保已经安装如下依赖:

pip install fastapi tortoise-orm aerich asyncmy
  • tortoise-orm:异步 ORM 框架
  • aerich:Tortoise-ORM 的迁移管理工具
  • asyncmy:Tortoise 连接 MySQL 所用的异步驱动(也可用 aiomysql)

⚙ 二、Tortoise 配置 settings.py

创建 settings.py,配置 Tortoise-ORM 连接和应用模块:

TORTOISE_ORM = {"connections": {"default": {"engine": "tortoise.backends.mysql","credentials": {"host": "127.0.0.1","port": 3306,"user": "root","password": "your_password","database": "fastapi","minsize": 1,"maxsize": 5,"charset": "utf8mb4","echo": True},}},"apps": {"models": {"models": ["models", "aerich.models"],  # 注册你的模型模块和 aerich 内置模型"default_connection": "default",}},"use_tz": False,"timezone": "Asia/Shanghai",
}

🛠️ 三、Aerich 初始化和数据库初始化

1️⃣ 初始化 Aerich 项目

aerich init -t settings.TORTOISE_ORM
  • -t 参数传入 Tortoise 配置变量路径
  • 自动生成 pyproject.tomlmigrations/ 目录

2️⃣ 初始化数据库

aerich init-db

会根据当前模型自动创建表,并生成初始迁移文件:

Success creating app migration folder migrations\models
Success generating initial migration file for app "models"

🔁 四、模型修改与迁移管理

✏️ 1. 修改模型

如果需要在 models.py 中添加字段或改动模型:

from tortoise.models import Model
from tortoise import fieldsclass User(Model):id = fields.IntField(pk=True)username = fields.CharField(max_length=50)age = fields.IntField(null=True)  # 新增字段

🔄 2. 生成迁移文件

aerich migrate

输出示例:

Success creating migration file 1_20250706114908_update.py

⬆️ 3. 升级数据库

aerich upgrade

应用最新迁移,更新数据库结构:

Success upgrading to 1_20250706114908_update.py

⚠️ 五、回滚与历史查看

⬇️ 回滚上一次迁移(危险操作)

aerich downgrade

需要确认是否继续,谨慎操作:

Downgrade is dangerous: you might lose your data! Are you sure? [y/N]: y

📜 查看迁移历史

aerich history

输出:

0_20250706114346_init.py
1_20250706114908_update.py

✅ 总结:常用 Aerich 命令表

命令说明
aerich init -t settings.TORTOISE_ORM初始化 Aerich 项目
aerich init-db初始化数据库并创建初始迁移
aerich migrate根据模型变更生成迁移文件
aerich upgrade执行迁移,更新数据库结构
aerich downgrade回滚上一个迁移版本
aerich history查看所有迁移历史版本

🧩 参考项目结构

FastapiProject/
├── app/
│   └── models.py
├── settings.py
├── main.py
├── migrations/
│   └── models/
├── pyproject.toml

🚀 写在最后

使用 Aerich + Tortoise-ORM,可以极大地简化异步 FastAPI 项目的数据库迁移管理过程。尤其在协作开发、版本迭代中,结构化的迁移记录将为数据库演进提供可追溯性与安全性。

如果要集成 SQLite 或 PostgreSQL,只需要调整 db_urlengine 和驱动包即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87962.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.7日 实验03-Spark批处理开发(2)

使用Spark处理数据文件检查数据检查$DATA_EXERCISE/activations里的数据&#xff0c;每个XML文件包含了客户在指定月份活跃的设备数据。拷贝数据到HDFS的/dw目录样本数据示例&#xff1a;<activations><activation timestamp"1225499258" type"phone&q…

C语言可变参数感悟

#include <stdio.h> #include <stdarg.h> #if 1 /* *在C语言中&#xff0c;可变参函数是指参数数量不固定的函数&#xff0c;比如printf\scanf *可变参函数的语法&#xff1a; *返回类型 函数名&#xff08;固定函数&#xff0c;.....) { //函数体 } *1、包含头文件…

LeetCode 1248.统计优美子数组

给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字&#xff0c;我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数目。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2,1,1], k 3 输出&#xff1a;2 解释&#xf…

FastAPI Docker环境管理脚本使用指南

作者: 源滚滚AI编程 创建时间: 2025年07月08日 版本: v1.0.0 文档状态: 完成 版权声明 本文档由源滚滚AI编程创作,版权所有。未经作者书面许可,不得复制、分发或用于商业用途。 免责声明 本文档仅用于技术交流和学习目的。作者不对使用本文档内容导致的任何问题承担责任。…

前端常见 HTTP 状态码

作为前端开发者&#xff0c;与后端 API 交互时&#xff0c;HTTP 状态码是判断请求成败的关键信号。理解常见状态码的含义、责任归属及应对策略&#xff0c;能极大提升调试效率和团队协作。以下是关键状态码的详细解析&#xff1a; 首先说一下如何查看状态码&#xff1a; 如上图…

深度解析C语言内存函数(小米面试题)

目录 一、memcpy1.1 代码演示1.2 memcpy的模拟实现 二、memmove2.1 代码演示2.2 模拟实现&#xff08;小米面试题&#xff09; 三、memset3.1 代码演示3.2 总结 四、memcmp4.1 代码演示4.2 总结 总结 一、memcpy &#xff08;memory copy 内存复制&#xff09; 之前文章中写的…

DK124反激式开关电源芯片

18W 高性能交直流转换芯片 特性 DK124 是一款离线式开关电源芯片&#xff0c;最大输出功率达到 24W。内部集成了 PWM 控制器、700V 功率管和初级峰值电流检测电路&#xff0c;并采用了可以省略辅助供电绕组的专利自供电技术&#xff0c;极大简化了外围应用电路&#xff0c;减…

商品销售数据分析实验

进入虚拟机&#xff0c;启动HDFS和Yarn1.创建表 hive show databases; use test;销售订单表create table t_dml (detail_id bigint,sale_date date, province string,city string,product_id bigint,cnt bigint,amt double )row format delimited fields terminated by ,;商品…

PH热榜 | 2025-07-08

1. TensorBlock Forge 标语&#xff1a;人工智能模型的API 介绍&#xff1a;Forge是一个快速且安全的工具&#xff0c;让你可以跨不同供应商连接和运行AI模型 产品网站&#xff1a; 立即访问 Product Hunt&#xff1a; View on Product Hunt 票数&#xff1a; &#x1f53a…

2025-01)electronjs-v11.2.0升级到新版本electronjs-v37.2.0记录,node版本记录,淘宝镜像配置记录,升级记录

背景:由于22年使用electronjs开发的自助机客户端几年没去维护,现在有需求要修改,电脑也换新了,node环境也没,直接把electron从 之前的 11.2.0 版本 升级到了37.2.0版本,升级最主要的目的是升级谷歌浏览器内核,升级后谷歌浏览器内核直接从87升级到了138,可以支持谷歌最新…

iQOO手机怎样相互远程控制?其他手机可以远程控制iQOO吗?

iQOO是Vivo同一品牌下的产品&#xff0c;它们两款手机都可以使用手机内置的远程控制功能。具体做法是&#xff0c;打开控制端的iQOO手机的【设置】【快捷与辅助】、【远程协助】&#xff0c;然后输入被控端的电话号码&#xff0c;等被控端的手机接受远程协助后&#xff0c;就可…

【入门级-C++程序设计:3、程序基本语句-多层循环语句】

1、定义&#xff1a; 在 C 中&#xff0c;多层循环&#xff08;嵌套循环&#xff09;是指在一个循环体内包含另一个或多个循环语句。它常用于处理多维数据结构&#xff08;如二维数组&#xff09;、复杂的迭代逻辑&#xff08;如矩阵运算、图形打印、组合遍历等&#xff09;。多…

四、jenkins自动构建和设置邮箱

一、jenkins自动构建什么自动构建、有啥用&#xff1a;触发方式代码提交&#xff08;Git push&#xff09;定时任务&#xff08;如每天凌晨构建&#xff09;手动点击等方式&#xff08;立即执行&#xff09;执行内容从 Git/SVN 拉取最新代码运行编译&#xff08;如 Maven/Gradl…

【深度学习新浪潮】深入解析LLM关键概念:架构、优化与最新研究进展

1. Transformer架构与注意力机制 概念解析 Transformer是LLM的核心架构,由编码器和解码器组成,其核心创新是自注意力机制,通过计算输入序列中每个位置的关联权重,动态聚焦关键信息。自注意力机制的计算复杂度为O(n),在处理长序列时成为性能瓶颈。 代码示例:基础Transfo…

RAGflow图像解析与向量化分析

RAGflow图像解析与向量化分析 注:需要提前部署好ragflow,才方便一 一对应代码,部署教程:rag部署教程,这样才会方便后续更改 1. 图像解析流程 RAGflow通过多种解析器处理不同类型的文档,其中图像解析是一个重要组成部分。以下是RAGflow处理图像的主要流程: 1.1 PDF文…

千翼破界,百景赋能 | 2025深圳eVTOL展无人机场景应用专场即将启幕

在技术革新、应用深化、产业链协同升级及低空空域管理改革等多重政策红利驱动下&#xff0c;我国工业级无人机产业正迈入爆发式增长新阶段&#xff0c;持续引领民用无人机市场繁荣。数据显示&#xff0c;2019 至2024年&#xff0c;我国民用无人机市场规模从435.1亿元跃升至1108…

Go语言标识符命名规则详解:工程化实践

引言 Go语言的命名规则是其简洁哲学和工程实用性的集中体现。下面从语法规范、最佳实践到实际应用进行全面解析&#xff1a; 一、基础命名规则 1. 变量命名 // 小驼峰式&#xff08;lowerCamelCase&#xff09; var userName string var maxRetryCount 3 var isConnected bool…

RISC-V:开源芯浪潮下的技术突围与职业新赛道 (一)为什么RISC-V是颠覆性创新?

第一篇&#xff1a;开篇&#xff1a;为什么RISC-V是颠覆性创新&#xff1f; 打破70年架构垄断&#xff0c;开源硬件如何重塑芯片产业规则&#xff1f;一、传统架构的“围城之困”&#xff08;痛点切入&#xff09; ARM/X86的统治代价 授权费暴利模型 &#xff1a; ARM指令集授权…

【机器学习笔记 Ⅱ】7 多类分类

1. 多类分类&#xff08;Multi-class Classification&#xff09; 定义 多类分类是指目标变量&#xff08;标签&#xff09;有超过两个类别的分类任务。例如&#xff1a; 手写数字识别&#xff1a;10个类别&#xff08;0~9&#xff09;。图像分类&#xff1a;区分猫、狗、鸟等。…

2025年深圳杉川机器人性格测评和Verify测评SHL题库高分攻略

1、杉川机器人包含性格测评和Verify测评&#xff0c;预计用时60min&#xff0c;请确保作答时周围环境无干扰、网络畅通&#xff1b;2、请使用电脑完成作答&#xff0c;建议使用以下浏览器登录&#xff1a;IE9.0及以上版本&#xff0c;火狐&#xff0c;谷歌&#xff1b;3、杉川机…