跳至主要内容

编写自己的 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,您可以

  1. 使用熟悉的语法编写复杂的 SQL 查询
  2. 从 SQL 的完整 IDE 支持和语法高亮中受益
  3. 将您的 SQL 查询导入为 TypeScript 代码中的完全类型化函数
  4. 保持原始 SQL 的灵活性和 Prisma 类型系统的安全性

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 及更高版本开始可用。

与关系数据库中的原始查询类似,这些方法不安全,需要手动处理查询结果。