2024年4月2日

在边缘构建应用程序:使用 Prisma ORM & Cloudflare D1 (预览版)

Cloudflare 自 2017 年推出 Workers 以来,一直在边缘计算领域处于领先地位。随着 D1 的发布,Cloudflare 最近推出了原生无服务器数据库。我们很高兴地宣布,您现在可以使用 Prisma ORM 与 D1 进行交互!

Build Applications at the Edge with Prisma ORM & Cloudflare D1 (Preview)

将您的数据库带到边缘:使用 D1

边缘函数,例如 Cloudflare Workers,是一种轻量级的无服务器计算形式,分布在全球各地。它们允许您将应用程序部署和运行到尽可能靠近最终用户的位置。

D1 是 Cloudflare 针对边缘环境的原生无服务器数据库。它基于 SQLite,可在使用 Cloudflare 部署应用程序时使用。D1 于 2022 年首次推出

您无需指定 Cloudflare Worker 或 D1 数据库的运行位置——它们只需在需要的地方运行。

D1: our quest to simplify databases (2022)D1:我们简化数据库的探索 (2022) 位于 Cloudflare 博客

遵循 Cloudflare 的地理分布式原则,并将计算和数据更接近应用程序用户,D1 支持自动读复制:它根据数据库接收到的查询数量和来源,动态管理数据库实例和只读副本的位置。

这意味着读查询将针对离查询发起位置最近的 D1 实例执行。

虽然您也可以与其他数据库提供商使用 Prisma ORM 的读副本,但这通常需要您使用 读副本客户端扩展。使用 D1 时,无需专用客户端扩展即可开箱即用地支持读副本。

另一方面,对于写操作,查询仍会传输到单个主实例,以便将更改传播到所有读副本并确保数据一致性。

Prisma ORM 现已支持 D1 🚀 (预览版)

在 Prisma,我们相信 Cloudflare 正在引领未来应用程序的构建和部署方式。

您可以通过这篇博客文章了解我们如何将 Cloudflare 视为改善 Data DX 的合作伙伴:重塑开发者体验:Prisma & Cloudflare 引领 Data DX 之路

支持 D1 一直是 Prisma ORM 在 GitHub 上最受欢迎的功能请求之一。

作为 Cloudflare 技术的坚定支持者,我们很高兴地宣布,您现在可以在 Cloudflare Workers(和 Pages)中使用 Prisma ORM 来访问 D1 数据库。

请注意,此功能基于目前处于预览阶段的驱动适配器,因此我们也认为 D1 支持处于预览阶段。

Prisma ORM 和 D1 入门

接下来,您将找到从头开始设置和部署一个通过 Prisma ORM 访问 D1 数据库的 Cloudflare Worker 的分步说明。

截至此版本,Prisma Migrate 尚未与 D1 完全兼容。在本教程中,您将结合 D1 的迁移系统和 prisma migrate diff 命令来生成和运行迁移。

先决条件

  • 您的机器上安装了 Node.js 和 npm
  • 一个 Cloudflare 账户

1. 创建一个 Cloudflare Worker

首先,使用 npm create 来引导一个纯净版的 Cloudflare Worker(使用 Cloudflare 的 hello-world 模板)。在您的终端中运行以下命令

这将弹出一个 CLI 向导。在每次出现问题时,通过点击 Return 键来选择所有默认选项。

在向导结束时,您应该会在域名 https://prisma-d1-example.USERNAME.workers.dev 拥有一个已部署的 Cloudflare Worker,它在浏览器中简单地显示“Hello World”

2. 初始化 Prisma ORM

Worker 准备就绪后,我们来设置 Prisma ORM。

首先,进入项目目录并安装 Prisma CLI

接下来,安装 Prisma Client 包以及 D1 的驱动适配器

最后,使用以下命令引导 Prisma ORM 所需的文件

此命令完成了两件事

  • 它创建了一个名为 prisma 的新目录,其中包含您的 Prisma schema 文件。
  • 它创建了一个 .env 文件,该文件通常用于配置 Prisma CLI 将读取的环境变量。

在本教程中,您不需要 .env 文件,因为 Prisma ORM 和 D1 之间的连接将通过绑定来实现。您将在下一步中找到设置此绑定的说明。

由于您将使用目前处于预览阶段的驱动适配器功能,因此您需要通过 generator 块上的 previewFeatures 字段明确启用它。

打开您的 schema.prisma 文件,并调整 generator 块,使其如下所示

3. 创建 D1 数据库

在此步骤中,您将设置 D1 数据库。通常有两种方法:使用 Cloudflare Dashboard UI 或通过 wrangler CLI。本教程将使用 CLI。

打开您的终端并运行以下命令

如果一切顺利,您应该会看到类似以下的输出

您现在在 Cloudflare 账户中拥有一个 D1 数据库,并已绑定到您的 Cloudflare Worker。

复制命令输出的最后一部分并将其粘贴到您的 wrangler.toml 文件中。它应该看起来像这样

请注意,上面代码片段中的 __YOUR_D1_DATABASE_ID__ 是一个占位符,应替换为您自己的 D1 实例的数据库 ID。如果您无法从终端输出中获取此 ID,也可以在 Cloudflare 控制台 中找到它,或者在终端中运行 npx wrangler d1 info prisma-demo-db

接下来,您将在数据库中创建一个数据库表,以便能够使用 Prisma ORM 向 D1 发送一些查询。

4. 在数据库中创建表

D1 通过 wrangler d1 migrate 命令提供了自己的迁移系统。该迁移系统与 Prisma CLI 配合良好,Prisma CLI 提供了工具,允许您为模式更改生成 SQL 语句。因此,您可以

  • 使用 D1 的原生迁移系统创建并将迁移文件应用到您的 D1 实例
  • 使用 Prisma CLI 为任何模式更改生成 SQL 语句

接下来,您将同时使用 D1 的迁移系统和 Prisma CLI 来创建并针对您的数据库运行迁移。

首先,使用 wrangler CLI 创建一个新的迁移

当提示命令是否可以创建一个名为 migrations 的新文件夹时,点击 Return 键确认。

该命令现在已创建一个名为 migrations 的新目录,并在其中创建了一个名为 0001_create_user_table.sql 的空文件

接下来,您需要将创建 User 表的 SQL 语句添加到该文件中。打开 schema.prisma 文件并添加以下 User 模型

现在,在您的终端中运行以下命令,生成创建与上述 User 模型等效的 User 表的 SQL 语句

这将在您之前的迁移文件 migrations/0001_ceate_user_table.sql 中存储一个创建新 User 表的 SQL 语句,它看起来像这样

您现在需要使用 wrangler d1 migrations apply 命令将此 SQL 语句发送到 D1。此命令接受两个选项

  • --local:针对 D1 的本地版本执行语句。此 D1 的本地版本是一个 SQLite 数据库文件,将位于您项目的 .wrangler/state 目录中。当您想在本地机器上开发和测试您的 Worker 时,此方法很有用。在Cloudflare 文档中了解更多。
  • --remote:针对 D1 的远程版本执行语句。此版本由您已部署的 Cloudflare Workers 使用。在Cloudflare 文档中了解更多。

在本教程中,您将两者都做:在本地测试 Worker,然后再部署它。因此,您需要运行这两个命令。打开您的终端并粘贴以下命令。

首先,针对您的本地数据库执行模式更改

接下来,针对远程数据库

两次都被提示确认是否应用迁移时,请点击 Return 键。

您的本地和远程 D1 实例现在都包含 User 表。

我们再创建一些可以在 Worker 运行后查询的虚拟数据。这次,您将运行 SQL 语句,而不将其存储在文件中。

再次,首先针对您的本地数据库运行该命令

最后,针对您的远程数据库运行它

您现在在本地和远程数据库实例中都有一个虚拟记录。您可以在 .wrangler/state 中找到本地 SQLite 文件,而远程文件可以在 Cloudflare 控制台中查看。

5. 从 Worker 查询您的数据库

为了使用 Prisma ORM 从 Worker 查询数据库,您需要

  1. DB 添加到 Env 接口。
  2. 使用 PrismaD1 驱动适配器实例化 PrismaClient
  3. 使用 Prisma Client 发送查询并返回结果。

打开 src/index.ts 并将其内容替换为以下内容

在运行 Worker 之前,您需要使用以下命令生成 Prisma Client

6. 在本地运行 Worker

数据库查询准备就绪且 Prisma Client 已生成后,您可以继续在本地运行 Worker

现在您可以在浏览器中打开 https://:8787 查看数据库查询结果

7. 部署 Worker

要部署 Worker,请运行以下命令

与之前一样,您已部署的 Worker 可通过 https://prisma-d1-example.USERNAME.workers.dev 访问。如果您在浏览器中访问该 URL,您应该会看到从远程 D1 数据库查询到的以下数据

恭喜,您刚刚部署了一个使用 D1 作为数据库并通过 Prisma ORM 查询它的 Cloudflare Worker 🎉

立即试用

我们很想听听您对 Prisma ORM 中新 D1 支持的看法!请试用并向我们反馈您的意见,您可以在 GitHubDiscord 上分享。编码愉快 ✌️

不要错过下一篇文章!

订阅 Prisma 简报

© . All rights reserved.