Skip to content

讲解

理解导向。 讲解告诉你为什么——为什么 sqlmodel-ext 要这么设计、为什么某个机制存在、它解决了什么深层问题。它不教你做事(那是 教程操作指南 的工作),也不列 API(那是 参考 的工作)。 这部分适合你已经会用,但好奇"为什么是这样"的时候阅读。

阅读建议

讲解类文档没有强制顺序,按兴趣挑选即可。但如果你完全不熟悉异步 SQLAlchemy 的内部机制,建议先看 前置知识

章节难度解答的问题
前置知识入门ORM、Session、懒加载、元类、Annotated 类型——这些底层概念是什么?
元类与 SQLModelBase中等为什么 sqlmodel-ext 需要自定义元类?它在类创建瞬间做了什么?
CRUD 实现核心save() / get() 内部如何工作?为什么必须用返回值?
多态继承机制高级JTI 和 STI 在 SQLAlchemy 层面如何实现?两阶段列注册解决了什么问题?
乐观锁机制中等自动重试如何把"丢失更新"问题转成可重试的冲突?
关系预加载机制中等@requires_relations 如何在不改调用方代码的前提下声明依赖?
Redis 缓存机制高级双层缓存(ID + 查询)如何配合自动失效?为什么要 _cached_ancestors
静态分析器原理高级AST 如何在启动时找出潜在的 MissingGreenlet 问题?

核心设计哲学

sqlmodel-ext 的所有设计决策都围绕一个目标:让用户只声明式地写模型定义,框架在幕后处理 SQLAlchemy 的所有配置细节

实现这个目标依赖几项关键技术:

技术解决的问题详见
自定义元类 __DeclarativeMeta自动 table=True、JTI/STI 检测、sa_type 提取、__mapper_args__ 合并元类与 SQLModelBase
Mixin 组合模式CRUD、乐观锁、缓存、预加载——每个能力独立,按需混入各章节
__init_subclass__ 钩子导入时验证关系名拼写、自动生成多态 identity多态继承
__get_pydantic_core_schema__让自定义类型同时满足 Pydantic 验证和 SQLAlchemy 列映射元类与 SQLModelBase
AST 静态分析在请求到达之前发现 MissingGreenlet 隐患静态分析器
双层缓存 + 版本号失效行级精确缓存 + 模型级 O(1) 失效Redis 缓存

讲解不是什么

  • 不是教程。讲解不会带你从零写代码。
  • 不是 API 参考。讲解会引用源码片段,但不会列每个参数的完整定义。
  • 不一定面向所有用户。你可以完全不读讲解就把 sqlmodel-ext 用得很好。讲解面向想"打开发动机盖看一看"的人。