FastAPI怎么使用Tortoise-ORM连接PostgreSQL数据库

风婷酱_2567

风婷酱_2567

2026-10-10

413人浏览

原创

推荐 register_tortoise 是因为它自动处理启动初始化、关闭连接、异常映射(如 404)、自动建表(generate_schemas=true),避免手动 init 导致的连接泄漏或错误码不一致。

fastapi怎么使用tortoise-orm连接postgresql数据库

直接用 register_tortoise 最省事,别自己写 init_db ——除非你明确需要控制连接生命周期或做多库路由。

为什么推荐 register_tortoise 而不是手动 init

FastAPI 官方生态里,tortoise-orm 提供了 tortoise.contrib.fastapi.register_tortoise 这个封装函数,它自动处理了:startup 时初始化、shutdown 时关闭连接、异常中间件注册(比如把 Tortoise.exceptions.DoesNotExist 映射成 404)、甚至支持 generate_schemas=True 自动建表。自己手写 await Tortoise.init() 容易漏掉 close_connections 或没加异常处理器,导致连接泄漏或错误码不一致。

常见错误现象:

  • 服务重启后首次请求慢 → 没开 generate_schemas=True,每次查表都触发元数据检查
  • 压测时出现 asyncpg.exceptions.TooManyConnectionsError → 忘记在 shutdown 里调用 Tortoise.close_connections()
  • 查不到记录却返回 500 而非 404 → 没启用 add_exception_handlers=True

register_tortoise 的关键参数怎么填

PostgreSQL 连接字符串格式必须是 postgres://user:password@host:port/dbname(注意不是 postgresql://,Tortoise 默认不认后者,会静默 fallback 到 SQLite)。

实操建议:

  • db_url 建议从环境变量读取,比如 os.getenv("DATABASE_URL"),避免硬编码
  • modules 必须是 Python 模块路径列表,例如 {"models": ["app.models"]},路径错一个字母就找不到模型,不会报错,只会建空库
  • generate_schemas=True 仅用于开发/测试;生产环境务必关掉,改用 aerich 做迁移
  • 如果用 Pydantic BaseSettings 管理配置,记得字段名匹配:PostgreSQL 连接串中 user 对应数据库用户名,不是系统用户

PostgreSQL 驱动装哪个?asyncpg 还是 psycopg2

必须装 asyncpg,psycopg2 是同步驱动,和 Tortoise 的异步设计不兼容——哪怕装了也完全不生效,启动时无提示,但所有数据库操作都会卡死或超时。

安装命令要带 extra:

FastAPI Flask Proxy
FastAPI Flask Proxy

FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。

下载
pip install tortoise-orm[asyncpg]

不是 pip install asyncpg 单独装(虽然也能跑,但缺了 Tortoise 内部的适配层,某些高级功能如 JSON 字段操作可能异常)。

容易踩的坑:

  • 误装 psycopg2-binary → FastAPI 启动不报错,但发请求时卡在 await User.all(),日志里看不到任何数据库交互
  • Docker 部署时只写了 asyncpg 在 requirements.txt,却忘了 tortoise-orm 本身没写,导致 ModuleNotFoundError: No module named 'tortoise'
  • 本地开发用 SQLite,CI 用 PostgreSQL,结果 db_url 没区分环境,测试跑不过

模型定义后,第一次运行不建表?

两个必要条件缺一不可:

  • register_tortoise(..., generate_schemas=True) 开启
  • 模型类必须继承 tortoise.models.Model,且文件被 modules 参数成功导入(比如 app/models/__init__.py 里显式 from .user import User)

典型失败场景:

模型文件叫 user_model.py,但 modules={"models": ["app.models"]} 只扫描 app/models/__init__.py,没 import 这个文件 → 启动日志里有 No models registered,但不会中断进程。

验证是否生效:启动后访问 /docs,然后执行一条简单查询(如 curl http://localhost:8000/users),看 PostgreSQL 日志是否有 CREATE TABLE 记录,或者直接连进数据库执行 \dt。

复杂点在于:Tortoise 的 schema 生成是「懒加载」的,只有第一个 ORM 操作触发时才建表。所以光启动服务不发请求,表不会出现——这点和 Django migrate 主动建表完全不同,容易误判配置失败。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

数据库 fastapi

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

534

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

536

23

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

2026.06.16

439

12

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.10

213

5

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4369

19

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。更详细的postgresql常用命令,大家可以访问下面的文章。

2023.11.16

627

3

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有\l、\d、\d5、\di、\ds、\dv、\df、\dn、\db、\dg、\dp、\c、\pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

2023.11.20

1376

6

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

2026.02.12

460

19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架新项目生成指南
Buffalo框架新项目生成指南

共0课时 | 0人学习

Buffalo框架官方文档
Buffalo框架官方文档

共0课时 | 0人学习

FastAPI SQL数据库实战文档
FastAPI SQL数据库实战文档

共0课时 | 0人学习