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:
tags:
扫描二维码
关注大概微信搜一搜:编程智域 前端至全栈交流与成长
探索数千个预构建的 AI 应用,开启你的下一个伟大创意https://tools.cmdragon.cn/
第一章:模子类元数据配置基础

1.1 模子定义与元数据

在FastAPI中使用Tortoise-ORM时,模子类通过Python类属性与数据库字段建立映射关系。每个模子类必须继承自tortoise.models.Model
,并通过class Meta定义元数据:
  1. from tortoise.models import Model
  2. from tortoise import fields
  3. class User(Model):
  4.     id = fields.IntField(pk=True)
  5.     username = fields.CharField(max_length=50, unique=True)
  6.     created_at = fields.DatetimeField(auto_now_add=True)
  7.     class Meta:
  8.         table = "auth_users"
  9.         table_description = "系统用户数据表"
  10.         schema = "public"
  11.         unique_together = (("username", "email"),)
复制代码
代码解析:
1.2 Tortoise-ORM初始化配置

在FastAPI启动时初始化数据库连接,推荐使用lifespan变乱处理:
  1. from contextlib import asynccontextmanager
  2. from fastapi import FastAPI
  3. from tortoise import Tortoise
  4. @asynccontextmanager
  5. async def lifespan(app: FastAPI):
  6.     await Tortoise.init(
  7.         db_url='postgres://user:pass@localhost:5432/mydb',
  8.         modules={'models': ['app.models']},
  9.         _create_db=True
  10.     )
  11.     await Tortoise.generate_schemas()
  12.     yield
  13.     await Tortoise.close_connections()
  14. app = FastAPI(lifespan=lifespan)
复制代码
关键参数阐明:
第二章:aerich迁移工具实战

探索数千个预构建的 AI 应用,开启你的下一个伟大创意https://tools.cmdragon.cn/
2.1 aerich安装与初始化

安装命令:
  1. pip install aerich
复制代码
初始化迁移环境:
  1. aerich init -t app.config.TORTOISE_ORM
  2. aerich init-db
复制代码
在项目根目录创建aerich_config.py:
  1. TORTOISE_ORM = {
  2.     "connections": {"default": "postgres://user:pass@localhost:5432/mydb"},
  3.     "apps": {
  4.         "models": {
  5.             "models": ["app.models", "aerich.models"],
  6.             "default_connection": "default",
  7.         }
  8.     },
  9. }
复制代码
2.2 迁移操作流程

  1. aerich migrate --name add_user_table
复制代码
  1. aerich show migrations
复制代码
  1. aerich upgrade
复制代码
  1. aerich downgrade -v -1
复制代码
2.3 迁移文件示例

生成的迁移文件migrations/20231111_1200_add_user_table.sql:
  1. -- upgrade --
  2. CREATE TABLE "auth_users"
  3. (
  4.     "id"         SERIAL      NOT NULL PRIMARY KEY,
  5.     "username"   VARCHAR(50) NOT NULL UNIQUE,
  6.     "created_at" TIMESTAMP   NOT NULL
  7. );
  8. COMMENT
  9. ON TABLE "auth_users" IS '系统用户数据表';
  10. -- downgrade --
  11. DROP TABLE "auth_users";
复制代码
第三章:常见问题解决方案

3.1 模子注册失败

错误现象:
tortoise.exceptions.ConfigurationError: No models in config
解决方案:
3.2 迁移文件辩论

错误现象:
aerich.exceptions.MigrationConflictError: Duplicate migration version
处理步骤:
课后Quiz

答案:B
解析:table参数指定命据库中的实际表名,schema用于定义数据库模式(如PostgreSQL的schema),两者共同决定表的物理存储位置。
答案:A
解析:正确流程为初始化数据库(init-db)、生成迁移文件(migrate)、应用变更(upgrade)。需先初始化迁移环境才能生成有效的迁移文件。
余下文章内容请点击跳转至 个人博客页面 大概 扫码关注大概微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:FastAPI与Tortoise-ORM模子配置及aerich迁移工具 | cmdragon's Blog
往期文章归档:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4