面向开发验证 —— 快速验证实体关系和数据结构。
# Write SDL by hand
type Query {
posts(limit: Int): [Post]!
}
type Post {
id: Int!
title: String!
author: User
}
# + resolver + DataLoader + N+1 fix
# Dozens of lines of boilerplate
class Post(SQLModel, table=True):
id: int | None = Field(primary_key=True)
title: str
author_id: int = Field(foreign_key="user.id")
author: User | None = Relationship()
@query
async def get_all(cls, limit: int = 10) -> list['Post']: ...
# SDL + DataLoader auto-generated!
面向生产数据对接 —— 用类型化 DTO 构建稳定的 REST 端点。
# Per-endpoint: manual SQL, N+1, dict munging
async def get_sprints():
sprints = await session.exec(select(Sprint))
result = []
for s in sprints:
tasks = await session.exec(
select(Task).where(Task.sprint_id == s.id))
for t in tasks:
t.owner = await session.get(User, t.owner_id)
# N+1 queries, fragile dict construction
class UserDTO(DefineSubset):
__subset__ = (User, ("id", "name"))
class TaskDTO(DefineSubset):
__subset__ = (Task, ("id", "title", "owner_id"))
owner: UserDTO | None = None # auto-loaded
class SprintDTO(DefineSubset):
__subset__ = (Sprint, ("id", "name"))
tasks: list[TaskDTO] = [] # auto-loaded
# 1 query per relationship, zero N+1
ER 图、GraphQL、REST DTO 和 MCP,全部由 SQLModel 实体驱动。
SQLModel 实体 + 非 ORM 关系,一键生成 Mermaid ER 图。
@query / @mutation 装饰器自动生成 SDL,内置 DataLoader 批量加载。
DefineSubset + 隐式自动加载,声明式构建 REST 响应。
post_* 计算派生字段,ExposeAs / SendTo 实现跨层数据流。
通过 MCP 协议将 SQLModel API 暴露给 AI 代理。
业务逻辑定义为 RpcService,同时服务于 MCP 和 FastAPI。
从实体开始,按需扩展。每个阶段都建立在前一个之上。
与你现有的框架和工具无缝集成。