Agent Skills
返回列表
💻

sqlc 类型安全 SQL 代码生成器

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/sqlc-type-safe-sql-code-generator 技能。

技能介绍

要解决什么问题

ORM 把 SQL 藏进字符串模板或运行时拼装里,类型错误往往要等到执行那一刻才暴露:改了一个列名,代码里某处拼接的查询静默失效,编译期毫无征兆,反射带来的运行时开销也无法消除。sqlc 的思路相反——把 SQL 当作唯一的事实来源,让数据库结构的变化在编译阶段就变成编译错误。

核心能力与工作流程

  • 用纯 SQL 编写查询,放入 .sql 文件,通过配置文件声明数据库连接与输出设置;
  • 运行 sqlc generate,sqlc 解析 SQL,对照真实表结构做校验;
  • 生成目标语言的类型化接口:查询函数、参数 struct、结果 struct 全部带完整类型标注;
  • 生成的函数接受强类型参数、返回强类型结果,编译器在调用前就拦截类型不匹配的代码。

整个过程没有 ORM、没有反射、没有运行时拼查询。业务代码里调用的是一次普通的函数调用,传入什么类型、返回哪些字段,编译器一清二楚。

适用边界与注意点

  • SQL 方言不是 100% 覆盖:窗口函数、CTE 等特性在各家数据库上的支持程度不同,复杂 SQL 可能解析失败或需要改写;
  • 数据库 schema 变化后必须重新运行 sqlc generate 并提交生成的代码,否则类型与实际库结构脱节;
  • Python 输出依赖上游的 sqlc-gen-python,其能力与其他语言生成器存在差异,遇到问题需查阅上游文档;
  • 适合查询模式相对固定、以手写 SQL 为核心的项目;若团队重度依赖 ORM 的动态查询能力,迁移成本需要单独评估。

使用场景

  • Go 后端要把手写 SQL 放进 `.sql` 文件,用 sqlc generate 生成带参数与结果 struct 的类型化查询函数。
  • TypeScript/Node 服务需要访问数据库,想用纯 SQL 定义查询并生成带类型接口,避免运行时拼 SQL 字段对不上。
  • Python 服务不想引入 ORM,准备用 sqlc 生成类型化查询接口,在编译期发现参数或返回字段类型错误。
  • Kotlin 项目维护固定 SQL 查询,schema 变更后重新运行 sqlc generate,并提交生成代码让编译器报错。

适合人员

  • Go 后端工程师:需要为手写 SQL 生成编译期类型安全的数据访问层,减少 ORM 反射与运行时拼查询。
  • TypeScript/Node 全栈工程师:希望数据库查询返回完整类型,避免字段名不一致到运行时才暴露。
  • Python 服务开发者:不想引入 ORM,但仍要求 SQL 查询有类型化接口和参数约束。
  • Kotlin 后端工程师:查询模式相对固定,想在 schema 变更后由编译器捕获类型不一致。