qidao123.com技术社区-IT企服评测·应用市场
标题:
FastAPI与Tortoise-ORM模子配置及aerich迁移工具
[打印本页]
作者:
篮之新喜
时间:
2025-4-29 23:00
标题:
FastAPI与Tortoise-ORM模子配置及aerich迁移工具
title: FastAPI与Tortoise-ORM模子配置及aerich迁移工具
date: 2025/04/30 00:11:45
updated: 2025/04/30 00:11:45
author:
cmdragon
excerpt:
FastAPI中使用Tortoise-ORM时,模子类通过继承tortoise.models.Model并定义class Meta来映射数据库字段。元数据配置包括表名、schema、表注释和联合唯一束缚等。初始化数据库连接推荐使用lifespan变乱处理,配置参数包括数据库URL、模子模块路径等。aerich迁移工具用于管理数据库迁移,通过init-db、migrate和upgrade等命令实现迁移文件的生成和应用。常见问题包括模子注册失败和迁移文件辩论,需检查模子路径和清除辩论文件。
categories:
后端开发
FastAPI
tags:
FastAPI
Tortoise-ORM
数据库迁移
aerich工具
模子元数据
数据库初始化
常见问题解决方案
扫描
二维码
关注大概微信搜一搜:编程智域 前端至全栈交流与成长
探索数千个预构建的 AI 应用,开启你的下一个伟大创意
:
https://tools.cmdragon.cn/
第一章:模子类元数据配置基础
1.1 模子定义与元数据
在FastAPI中使用Tortoise-ORM时,模子类通过Python类属性与数据库字段建立映射关系。每个模子类必须继承自tortoise.models.Model
,并通过class Meta定义元数据:
from tortoise.models import Model
from tortoise import fields
class User(Model):
id = fields.IntField(pk=True)
username = fields.CharField(max_length=50, unique=True)
created_at = fields.DatetimeField(auto_now_add=True)
class Meta:
table = "auth_users"
table_description = "系统用户数据表"
schema = "public"
unique_together = (("username", "email"),)
复制代码
代码解析:
table:指定物理表名称(默认使用类名小写)
schema:数据库schema(实用于PostgreSQL)
table_description:表注释(生成DDL语句时会包含)
unique_together:联合唯一束缚
1.2 Tortoise-ORM初始化配置
在FastAPI启动时初始化数据库连接,推荐使用lifespan变乱处理:
from contextlib import asynccontextmanager
from fastapi import FastAPI
from tortoise import Tortoise
@asynccontextmanager
async def lifespan(app: FastAPI):
await Tortoise.init(
db_url='postgres://user:pass@localhost:5432/mydb',
modules={'models': ['app.models']},
_create_db=True
)
await Tortoise.generate_schemas()
yield
await Tortoise.close_connections()
app = FastAPI(lifespan=lifespan)
复制代码
关键参数阐明:
modules:指定模子所在模块路径
_create_db:主动创建数据库(仅限开发环境)
generate_schemas:主动生成数据库表结构
第二章:aerich迁移工具实战
探索数千个预构建的 AI 应用,开启你的下一个伟大创意
:
https://tools.cmdragon.cn/
2.1 aerich安装与初始化
安装命令:
pip install aerich
复制代码
初始化迁移环境:
aerich init -t app.config.TORTOISE_ORM
aerich init-db
复制代码
在项目根目录创建aerich_config.py:
TORTOISE_ORM = {
"connections": {"default": "postgres://user:pass@localhost:5432/mydb"},
"apps": {
"models": {
"models": ["app.models", "aerich.models"],
"default_connection": "default",
}
},
}
复制代码
2.2 迁移操作流程
创建迁移文件:
aerich migrate --name add_user_table
复制代码
查看未应用的迁移:
aerich show migrations
复制代码
执行升级:
aerich upgrade
复制代码
回滚变更:
aerich downgrade -v -1
复制代码
2.3 迁移文件示例
生成的迁移文件migrations/20231111_1200_add_user_table.sql:
-- upgrade --
CREATE TABLE "auth_users"
(
"id" SERIAL NOT NULL PRIMARY KEY,
"username" VARCHAR(50) NOT NULL UNIQUE,
"created_at" TIMESTAMP NOT NULL
);
COMMENT
ON TABLE "auth_users" IS '系统用户数据表';
-- downgrade --
DROP TABLE "auth_users";
复制代码
第三章:常见问题解决方案
3.1 模子注册失败
错误现象:
tortoise.exceptions.ConfigurationError: No models in config
解决方案:
检查aerich_config.py中的模子路径是否包含实际模子文件
确认__init__.py文件中已导入模子类
确保aerich migrate命令在项目根目录执行
3.2 迁移文件辩论
错误现象:
aerich.exceptions.MigrationConflictError: Duplicate migration version
处理步骤:
删除migrations目录下辩论的迁移文件
清空数据库中的aerich表记录
重新生成迁移文件
课后Quiz
在模子类Meta配置中,table和schema参数有什么区别?
A) table定义逻辑表名,schema定义物理存储位置
B) table定义物理表名,schema定义数据库模式
C) 两者可以互换使用
D) schema用于定义索引结构
答案:B
解析:table参数指定命据库中的实际表名,schema用于定义数据库模式(如PostgreSQL的schema),两者共同决定表的物理存储位置。
使用aerich进行数据库迁移的正确步骤是:
A) init-db → migrate → upgrade
B) migrate → init-db → upgrade
C) upgrade → migrate → init-db
D) init-db → upgrade → migrate
答案:A
解析:正确流程为初始化数据库(init-db)、生成迁移文件(migrate)、应用变更(upgrade)。需先初始化迁移环境才能生成有效的迁移文件。
余下文章内容请点击跳转至 个人博客页面 大概 扫码关注大概微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:
FastAPI与Tortoise-ORM模子配置及aerich迁移工具 | cmdragon's Blog
往期文章归档:
异步IO与Tortoise-ORM的数据库 | cmdragon's Blog
FastAPI数据库连接池配置与监控 | cmdragon's Blog
分布式事务在点赞功能中的实现 | cmdragon's Blog
Tortoise-ORM级联查询与预加载性能优化 | cmdragon's Blog
使用Tortoise-ORM和FastAPI构建评论系统 | cmdragon's Blog
分层架构在博客评论功能中的应用与实现 | cmdragon's Blog
深入解析事务基础与原子操作原理 | cmdragon's Blog
掌握Tortoise-ORM高级异步查询技巧 | cmdragon's Blog
FastAPI与Tortoise-ORM实现关系型数据库关联 | cmdragon's Blog
Tortoise-ORM与FastAPI集成:异步模子定义与实践 | cmdragon's Blog
异步编程与Tortoise-ORM框架 | cmdragon's Blog
FastAPI数据库集成与事务管理 | cmdragon's Blog
FastAPI与SQLAlchemy数据库集成 | cmdragon's Blog
FastAPI与SQLAlchemy数据库集成与CRUD操作 | cmdragon's Blog
FastAPI与SQLAlchemy同步数据库集成 | cmdragon's Blog
SQLAlchemy 核心概念与同步引擎配置详解 | cmdragon's Blog
FastAPI依赖注入性能优化策略 | cmdragon's Blog
FastAPI安全认证中的依赖组合 | cmdragon's Blog
FastAPI依赖注入系统及调试技巧 | cmdragon's Blog
FastAPI依赖覆盖与测试环境模拟 | cmdragon's Blog
FastAPI中的依赖注入与数据库事务管理 | cmdragon's Blog
FastAPI依赖注入实践:工厂模式与实例复用的优化策略 | cmdragon's Blog
FastAPI依赖注入:链式调用与多级参数传递 | cmdragon's Blog
FastAPI依赖注入:从基础概念到应用 | cmdragon's Blog
FastAPI中实现动态条件必填字段的实践 | cmdragon's Blog
FastAPI中Pydantic异步分布式唯一性校验 | cmdragon's Blog
掌握FastAPI与Pydantic的跨字段验证技巧 | cmdragon's Blog
FastAPI中的Pydantic密码验证机制与实现 | cmdragon's Blog
深入掌握FastAPI与OpenAPI规范的高级适配技巧 | cmdragon's Blog
Pydantic字段元数据指南:从基础到企业级文档增强 | cmdragon's Blog
Pydantic Schema生成指南:自定义JSON Schema | cmdragon's Blog
Pydantic递归模子深度校验36计:从无限嵌套到亿级数据的优化法则 | cmdragon's Blog
Pydantic异步校验器深:构建高并发验证系统 | cmdragon's Blog
Pydantic根校验器:构建跨字段验证系统 | cmdragon's Blog
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4