首页 > 解决方案 > 如果我需要 nextJS 中的 mysql 视图和存储过程,prisma 有什么好处

问题描述

我开始学习 prisma 以在我的 nextJS 应用程序中替换我的 nodejs 后端。

似乎 prisma 不适用于在我的 mysql 数据库中创建的视图和存储过程。

如果我不能只使用视图和存储过程,那么切换到 prisma 是否有意义,这允许我在数据库中创建一个只能访问这两个而不能访问其他内容的用户。

任何可以确认或否认我的想法的棱镜专业人士

谢谢

标签: next.jsprisma

解决方案


虽然目前 Prisma 不直接支持这两种功能,但存在一些变通方法,可以将这两种功能与 Prisma 一起使用。对于这两种情况,您都需要直接在 SQL 中执行一些操作。

存储过程

您可以使用$executeRawand$queryRaw命令通过 Prisma 执行原始 SQL 查询。您可以使用它来执行您创建的过程。例如,如果您调用了一个存储过程,foobar 您可以按如下方式执行它:

  const rawSQL = `call foobar`;
  const result = await prisma.$executeRaw(rawSQL);

您还可以使用生成$executeRaw存储过程或使用您选择的工具/CLI。

查看原始数据库访问文章$executeRaw以获取有关和的更多信息 $queryRaw,以及两者之间的区别。

MySQL 视图

存在通过 Prisma 使用视图的工作流。工作流程是这样的:

  1. 直接使用 SQL 创建视图。
  2. 内省数据库以更新您的 Prisma Schema。
  3. 手动将视图模型添加到 Prisma Schema。
  4. 生成 Prisma 客户端并使用为视图创建的实体类来运行查询。

您可以找到有关如何在 MySQL 中使用 SQL 视图以及讨论和当前限制的深入指南。

建议

对于这两个功能,我强烈建议在生产应用程序中采用 Prisma 之前先试用您的用例。例如,过去用户在运行将数据返回给客户端的程序时会遇到一些困难(不过现在应该解决这个问题)。

此外,如果您遇到任何问题或错误,请始终在 Prisma github repo 上创建问题。我们非常活跃,将尽最大努力帮助解决问题。


推荐阅读