Prisma Client API Reference

4天前发布 1 0 0

提供 Prisma Client 当前查询 API、筛选、关系加载、事务、原生 SQL 与客户端方法的结构化参考。

收录时间:
2026-09-19

Prisma Client API Reference 是什么

Prisma Client API Reference 是 Prisma 官方面向当前 Prisma 项目的查询参考 Skill,覆盖客户端构造、模型 CRUD、查询结果形状、筛选、关系、事务、原生 SQL和客户端级方法。它按影响等级组织参考,遇到 findMany、create、update、delete 或 transaction 等问题时只加载相关章节。

适用场景与选择边界

适合编写和审查 Prisma 查询、实现分页与过滤、读取关系、聚合统计、批量写入和事务。数据库首次接入应使用 Prisma Database Setup;命令行迁移、生成和 Studio 操作应使用 Prisma CLI,避免把 API 与 CLI 责任混在一起。

核心能力与工作机制

模型方法包括 findUnique、findFirst、findMany、create、createMany、update、upsert、delete、count、aggregate 与 groupBy。查询选项覆盖 where、select、include、omit、orderBy、take、skip、cursor 和 distinct;关系过滤支持 some、every、none、is 与 isNot,并提供事务和原生查询安全指导。

实际工作流

先确认 schema 中的模型、唯一键和关系,再定义查询目标与返回字段。优先使用类型安全模型 API,明确 where 与 select 或 include,评估分页和索引。多步原子操作进入 transaction;只有模型 API 无法表达时才考虑原生 SQL,并使用安全的参数化接口。

输入、输出与交付物

输入是 Prisma schema、业务查询目标、筛选与排序规则、事务边界和期望返回形状。输出通常是类型安全的 Prisma Client 代码及错误处理建议;重要查询还应附带索引假设、数据量和并发考虑,而不是只给一段能编译的示例。

依赖、账号与权限

需要已经生成且与 schema 同步的 Prisma Client,以及正确配置的数据库连接和 driver adapter。调用方式还受 Prisma 版本、数据库提供商和部署运行时影响;示例中的模型名与字段必须替换为项目真实 schema。

限制与安全风险

无约束 findMany、深层 include、offset 分页和逐行关系查询可能带来性能问题。updateMany、deleteMany 与原生 SQL 会大范围改变数据;事务过长会增加锁竞争。所有写操作要有明确 where 和测试,原生查询避免不安全字符串拼接。

适合谁使用

适合 TypeScript 或 JavaScript 后端开发者、代码审查者和正在把 SQL 需求映射到 Prisma API 的团队。对数据库性能负责的人还应结合具体数据库的执行计划和索引工具,不要只依赖 ORM 层。

上手与验收建议

从一个真实模型和小数据集开始,先写最窄的 select 与明确 where,再增加关系和分页。验收时检查生成 SQL 或执行计划、返回字段、空值与异常路径;事务用失败注入验证回滚,批量写入先在副本或事务中演练。

来源、版本与许可

依据 prisma/skills 固定提交中的完整 Prisma Client API Reference、skills.sh 详情与 MIT 许可证整理。

常见问题

1. 查一条记录应使用 findUnique 还是 findFirst?

有唯一键条件时优先 findUnique,它明确表达唯一性;需要按普通条件和排序取第一条时才用 findFirst。若不存在应直接失败,可选择对应的 OrThrow 版本。

2. select、include 和 omit 有什么区别?

select 明确只返回指定字段,include 加载关系,omit 排除不希望返回的字段。应根据接口最小数据需求选择,避免为了方便把大字段和深层关系全部加载。

3. 关系列表如何筛选?

对一对多或多对多关系可用 some、every 和 none 表达至少一个、全部或没有相关记录匹配;一对一关系用 is 与 isNot。条件应结合真实关系可空性测试。

4. 什么时候使用 $transaction?

多个读写必须作为一个原子业务动作提交时使用事务,并选择适合的批量或交互形式。事务应尽量短,避免在其中执行慢网络请求,以减少锁时间和失败重试成本。

5. 原生 SQL 可以直接拼接用户输入吗?

不可以。只有类型安全模型 API 无法表达需求时才考虑原生查询,并使用参数化、标记模板等安全接口。字符串拼接会引入 SQL 注入和类型转换风险。

6. 大列表分页应使用 skip 还是 cursor?

skip 与 take 适合浅层页码,但很大的 offset 可能越来越慢;稳定排序且数据量大时通常更适合 cursor 分页。选择前要确认唯一排序键和产品的跳页需求。

7. 如何避免查询返回过多数据?

为 where 设置明确条件,用 select 限定字段,用 take 控制条数,并谨慎 include 关系。对热点查询还应查看数据库索引和执行计划,ORM 类型安全不等于查询一定高效。

8. 批量更新或删除怎样降低风险?

先用相同 where 做 count 或只读查询确认范围,在事务和备份策略下执行,并检查返回数量。没有 where 的 deleteMany 或 updateMany 可能影响整表,不能直接用于生产。

数据统计

相关导航

暂无评论

none
暂无评论...