编写您自己的 SQL
虽然 Prisma Client API 旨在使您的所有数据库查询直观、类型安全且方便,但在某些情况下,原始 SQL 仍然是最佳工具。
发生这种情况的原因有很多,例如需要优化特定查询的性能,或者因为您的数据需求无法完全通过 Prisma Client 的查询 API 来表达。
在大多数情况下,TypedSQL 允许您用 SQL 表达您的查询,同时仍然受益于 Prisma Client 出色的用户体验。然而,由于 TypedSQL 是静态类型的,它可能无法处理某些场景,例如动态生成的 WHERE
子句。在这些情况下,您需要使用 $queryRaw
或 $executeRaw
,或其不安全版本。
使用 Prisma Client 和 TypedSQL 编写类型安全查询
TypedSQL 在 Prisma ORM 5.19.0 及更高版本中可用。对于早期版本中的原始数据库访问,请参阅我们的原始查询文档。
什么是 TypedSQL?
TypedSQL 是 Prisma ORM 的一项新功能,允许您在 .sql
文件中编写查询,同时仍然享受 Prisma Client 出色的开发者体验。您可以编写您熟悉的代码,并受益于完全类型化的输入和输出。
使用 TypedSQL,您可以
- 使用熟悉的语法编写复杂的 SQL 查询
- 受益于完整的 IDE 支持和 SQL 语法高亮
- 在您的 TypeScript 代码中将您的 SQL 查询作为完全类型化的函数导入
- 在 Prisma 类型系统的安全保障下,保持原始 SQL 的灵活性
TypedSQL 特别适用于
- 难以使用 Prisma 查询 API 表达的复杂报表查询
- 需要微调 SQL 的性能关键型操作
- 利用 Prisma API 中尚未支持的特定于数据库的功能
通过使用 TypedSQL,您可以编写高效、类型安全的数据库查询,而无需牺牲原始 SQL 的强大功能和灵活性。此功能允许您将自定义 SQL 查询无缝集成到您的 Prisma 驱动的应用程序中,从而确保类型安全并提高开发者生产力。
有关如何开始使用 TypedSQL 的详细指南,包括设置说明和使用示例,请参阅我们的TypedSQL 文档。
原始查询
在 5.19.0 版本之前,Prisma Client 仅支持非类型安全的原始 SQL 查询,并且需要手动将查询结果映射到所需的类型。
虽然不如 TypedSQL 那么符合人体工程学,但这些查询仍然受支持,并且在 TypedSQL 查询不可能的情况下(无论是由于 TypedSQL 中尚不支持的功能,还是查询是动态生成的)非常有用。
关系数据库中原始 SQL 查询的替代方法
Prisma ORM 支持四种在关系数据库中执行原始 SQL 查询的方法
这些命令类似于使用 TypedSQL,但它们不是类型安全的,并且作为字符串而不是在专用的 .sql
文件中编写在您的代码中。
文档数据库中原始查询的替代方法
对于 MongoDB,Prisma ORM 支持三种执行原始查询的方法
当您需要使用 MongoDB 特有的功能或优化时,这些方法允许您执行原始 MongoDB 命令和查询,从而提供灵活性。
$runCommandRaw
用于执行数据库命令,<model>.findRaw
用于查找与过滤器匹配的文档,<model>.aggregateRaw
用于聚合操作。这三种方法均可在 Prisma 3.9.0 及更高版本中使用。
与关系数据库中的原始查询类似,这些方法不是类型安全的,并且需要手动处理查询结果。