Tortoise-orm

Tortoise-orm

Tortoise ORM 模型字段完全参考

以下参数所有字段类型都支持: db_default 可用表达式(需从 tortoise.fields.db_defaults 导入): 整数,对应数据库 INT(32位有符号,约 -21亿 ~ 21亿)。 大整数,对应数据库 BIGINT(64位)。常用于雪花 ID 等大数值主键。 小整数,对应 SMALLINT(-32768 ~ 32767)。适合状态值、枚举数字。 双精度浮点,对应 DOUBLE。 精确小数,对应 DECIMAL。 对应数据库 VARCHAR(max_length)。 无限长文本,对应 TEXT。不能加 index(大文本不适合索引)

By yellowdog

Tortoise-orm

Tortoise ORM 查询操作完全指南

返回查询所有记录的 QuerySet(不立即执行)。 过滤条件,支持 Django 风格的 lookup。所有条件默认 AND 连接。 完整 Lookup 列表: 日期时间专用 Lookup(PostgreSQL/MySQL): 排除匹配条件的记录,等价于 NOT (条件)。 获取恰好一条记录,找不到抛 DoesNotExist,多条抛 MultipleObjectsReturned。 找不到返回 None,找到多条仍抛 MultipleObjectsReturned。 返回第一条记录(按当前排序),无结果返回 None。 返回最后一条记录。 按指定字段

By yellowdog

Tortoise-orm

多数据库路由

在 Tortoise.init() 的 config 中,connections 字典支持定义任意数量的命名连接。 每个连接支持两种写法:URL 字符串或完整 credentials 字典。 URL 字符串写法: 完整 credentials 写法(可配置连接池): credentials 通用参数: 每个 app 可以绑定到不同的数据库连接,通过 default_connection 指定: 同一 app 下的所有模型默认使用该 app 的 default_connection,除非模型自身通过 Meta 覆盖。 在模型定义中通过 Meta.using

By yellowdog

Tortoise-orm

Tortoise ORM 初始化与配置

pyproject.toml 配置: pydantic_model_creator 参数: .env 文件: 将数据库配置单独放在 config.py 或环境变量中,不要硬编码在 main.py:URL 中含有密码,应通过 os.environ 或 .env 文件注入,避免泄露到版本控制。 使用 aerich 管理迁移,不要在生产环境调用 generate_schemas():generate_schemas() 只能新建表,无法处理字段变更。生产环境应用 aerich upgrade 执行迁移文件,保证数据不丢失。 lifespan 事件中初始化,确保

By yellowdog

Tortoise-orm

信号机制

Tortoise ORM 提供 4 种内置信号,覆盖模型的保存和删除生命周期: 不同信号的 handler 签名略有差异: 所有信号 handler 必须是 async 函数,可以在其中执行任意异步操作: 信号 handler 必须在应用启动时完成注册,推荐在 lifespan 中或模块顶层导入时注册。 将所有信号 handler 放在独立文件,在应用启动前导入: 场景:在 post_save handler 中访问 instance.author(ForeignKey 字段)。 现象:NoValuesFetched: author 或返回空值。 原因:

By yellowdog

Tortoise-orm

Tortoise ORM 事务与并发

适合需要更精细控制的场景: 自动保存点(推荐):@atomic() 和 in_transaction() 天然支持嵌套,内层块会自动创建数据库保存点(SAVEPOINT)。内层块异常只回滚到进入该块前的状态,不影响外层事务。 手动保存点(底层 API): 防止并发读写同一行时产生竞态条件: select_for_update() 参数(部分数据库支持): 不使用行锁时,用 F 表达式进行原子更新: 用版本号或时间戳实现,不使用数据库锁: 1. 事务尽量短:持有锁的时间越长,并发阻塞越严重。不要在事务内进行网络请求、大量计算。 2. @atomic() 不

By yellowdog

Tortoise-orm

select_related 与 prefetch_related 完全指南

一句话: 不使用预加载时,循环访问关联对象会触发 N+1 查询(每次访问都发一条 SQL): 正确做法: 适用场景: FK / O2O 正向关联("多"的一方查询"一"的那个对象) 等价 SQL(近似): 适用场景: 反向关联(一对多)、M2M(多对多) 等价 SQL(近似,一对多): 多对多等价 SQL(近似,M2M): Prefetch 允许对预加载的关联集合添加额外的过滤、排序等: Prefetch 参数: 根据关联字段数量选择加载策略:select_related 适合 ForeignKey / OneToOne(JOIN 一张表),prefet

By yellowdog

Tortoise-orm

pydantic_model_creator 完整用法

不同操作场景需要不同的 Schema,推荐将 Create、Update、Response 分离定义。 当模型包含外键或反向关系时,pydantic_model_creator 会自动将关联对象嵌套序列化,但必须先 prefetch_related。 computed 参数可以将模型上的 @property 方法暴露为 Pydantic Schema 的字段。 计算属性在 Pydantic Schema 中为只读字段(无法从外部赋值),类型根据 @property 的返回类型注解自动推断。 exclude_readonly=True 会自动排除所有只读字

By yellowdog

Tortoise-orm

Aerich 迁移指南

Aerich 是 Tortoise ORM 的官方数据库迁移工具,功能类似 Django Migrations 或 Alembic,支持生成迁移文件、升级、回滚。 运行后会生成 aerich.ini 文件和 migrations/ 目录。 使用 pyproject.toml 可以避免项目根目录多出 aerich.ini,与现代 Python 项目工具链保持一致。当 aerich.ini 和 pyproject.toml 同时存在时,aerich.ini 优先。 Aerich 要求配置中的 apps 里必须包含 aerich.models,用于存储迁移版本

By yellowdog