跳转到内容
搜索文档

使用 Prisma ORM 查询 D1

最后更新 查看 MarkdownAgent 设置

什么是 Prisma ORM?

Prisma ORM 是下一代 JavaScript 和 TypeScript ORM,凭借其直观的数据模型、自动化迁移、类型安全和自动补全,在使用数据库时提供全新的开发者体验。

要了解更多关于 Prisma ORM 的信息,请参阅 Prisma 文档

使用 Prisma ORM 从 Cloudflare Worker 查询 D1

本教程展示如何从头开始设置和部署访问 D1 数据库的 Cloudflare Worker。

快速入门

如果您想跳过步骤快速开始,请选择下面的 Deploy to Cloudflare(部署到 Cloudflare)

Deploy to Cloudflare

这将在您的 GitHub 账户中创建一个仓库,并将应用程序部署到 Cloudflare Workers。如果您熟悉 Cloudflare Workers 并希望跳过分步指导,请使用此选项。

如果您是 Cloudflare Workers 新用户,可能需要手动按照步骤操作。

前提条件

1. 创建 Cloudflare Worker

打开终端,运行以下命令使用 Cloudflare 的 hello-world 模板创建 Cloudflare Worker:

npm create cloudflare@latest prisma-d1-example -- --type hello-world

在终端中,您将被问及一系列与您的项目相关的问题:

  1. 对于是否使用 TypeScript,回答 yes
  2. 对于是否部署 Worker,回答 no

2. 初始化 Prisma ORM

要设置 Prisma ORM,请进入您的项目目录,并安装 Prisma CLI:

cd prisma-d1-example
npm i -D prisma

接下来,安装 Prisma Client 包和 D1 驱动适配器:

npm i @prisma/client @prisma/adapter-d1

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

npx prisma init --datasource-provider sqlite

上述命令将:

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

在本教程中,您将不需要 .env 文件,因为 Prisma ORM 和 D1 之间的连接将通过绑定 (binding)进行。接下来的步骤将指导您设置此绑定。

由于您将使用目前处于 Preview 的驱动适配器功能,您需要通过 generator 块上的 previewFeatures 字段显式启用它。

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

schema.prismaprisma
generator client {
  provider        = "prisma-client-js"
  output          = "../src/generated/prisma"
  previewFeatures = ["driverAdapters"]
}

3. 创建您的 D1 数据库

在此步骤中,您将设置您的 D1 数据库。您可以通过 Cloudflare 仪表板wrangler 创建 D1 数据库。本教程将使用 wrangler CLI。

打开终端并运行以下命令:

npx wrangler d1 create prisma-demo-db

您应该在终端上收到以下输出:

✅ Successfully created DB 'prisma-demo-db' in region WEUR
Created your new D1 database.

{
  "d1_databases": [
    {
      "binding": "DB",
      "database_name": "prisma-demo-db",
      "database_id": "<D1_DATABASE_ID>"
    }
  ]
}

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

复制命令输出的最后一部分并将其粘贴到 Wrangler 配置文件中。它应该类似于:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "prisma-d1-example",
	"main": "src/index.ts",
	// Set this to today's date
	"compatibility_date": "2026-08-17",
	"compatibility_flags": [
		"nodejs_compat"
	],
	"observability": {
		"enabled": true
	},
	"d1_databases": [
		{
			"binding": "DB", // 即在您的 Worker 中通过 env.DB 可用
			"database_name": "prisma-demo-db",
			"database_id": "<D1_DATABASE_ID>"
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "prisma-d1-example"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-17"
compatibility_flags = [ "nodejs_compat" ]

[observability]
enabled = true

[[d1_databases]]
binding = "DB"
database_name = "prisma-demo-db"
database_id = "<D1_DATABASE_ID>"

<D1_DATABASE_ID> 替换为您的 D1 实例的数据库 ID。如果您无法从终端输出中获取此 ID,您也可以在 Cloudflare 仪表板 中找到它,或者在终端中运行 npx wrangler d1 info prisma-demo-db

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

4. 在数据库中创建表

Prisma Migrate 尚未支持 D1,因此您无法遵循使用 prisma migrate devprisma db push 的默认迁移工作流。

D1 使用迁移管理 schema 更改,Prisma CLI 可以帮助生成这些更新所需的 SQL。在以下步骤中,您将使用这两种工具创建迁移并将其应用到您的数据库。

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

npx wrangler d1 migrations create prisma-demo-db create_user_table

对于是否创建名为 migrations 的新文件夹,回答 yes

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

  • prisma-d1-example
    • migrations
      • 0001_create_user_table.sql

接下来,您需要向该文件中添加将创建 User 表的 SQL 语句。

打开 schema.prisma 文件,并将以下 User 模型添加到您的 schema 中:

schema.prismaprisma
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

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

npx prisma migrate diff --from-empty --to-schema ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sql
npx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sql

这会将用于创建新 User 表的 SQL 语句存储到您之前的迁移文件中,示例如下:

0001_create_user_table.sqlsql
-- CreateTable
CREATE TABLE "User" (
    "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    "email" TEXT NOT NULL,
    "name" TEXT
);

-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");

email 上创建了 UNIQUE INDEX,因为您的 Prisma schema 中的 User 模型在其 email 字段上使用了 @unique 属性。

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

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

在本教程中,您将进行本地和远程开发。您将在本地测试 Worker,然后部署您的 Worker。

打开终端并运行这两个命令:

# 针对本地数据库
npx wrangler d1 migrations apply prisma-demo-db --local
# 针对远程数据库
npx wrangler d1 migrations apply prisma-demo-db --remote

提示您确认应用迁移时,两次都选择 Yes

接下来,创建一些在 Worker 运行后可以查询的数据。这一次,您将直接运行 SQL 语句,而无需将其存储在文件中:

# 针对本地数据库
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO  \"User\" (\"email\", \"name\") VALUES
('jane@prisma.io', 'Jane Doe (Local)');" --local
# 针对远程数据库
npx wrangler d1 execute prisma-demo-db --command "INSERT INTO  \"User\" (\"email\", \"name\") VALUES
('jane@prisma.io', 'Jane Doe (Remote)');" --remote

5. 在 Worker 中查询您的数据库

要使用 Prisma ORM 从 Worker 查询您的数据库,您需要:

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

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

index.jsjs
import { PrismaClient } from "./generated/prisma/";
import { PrismaD1 } from "@prisma/adapter-d1";

export default {
	async fetch(request, env, ctx) {
		const adapter = new PrismaD1(env.DB);
		const prisma = new PrismaClient({ adapter });

		const users = await prisma.user.findMany();
		const result = JSON.stringify(users);
		return new Response(result);
	},
};
index.tsts
import { PrismaClient } from './generated/prisma/';
import { PrismaD1 } from '@prisma/adapter-d1';

export interface Env {
	DB: D1Database;
}

export default {
	async fetch(request, env, ctx): Promise<Response> {
		const adapter = new PrismaD1(env.DB);
		const prisma = new PrismaClient({ adapter });

		const users = await prisma.user.findMany();
		const result = JSON.stringify(users);
		return new Response(result);
	},
} satisfies ExportedHandler<Env>;

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

npx prisma generate

6. 在本地运行 Worker

现在您已经设置好数据库查询并生成了 Prisma Client,可以在本地运行 Worker:

npm run dev

在浏览器中打开 http://localhost:8787 以检查数据库查询的结果:

[{ "id": 1, "email": "jane@prisma.io", "name": "Jane Doe (Local)" }]

7. 部署 Worker

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

npm run deploy

https://prisma-d1-example.USERNAME.workers.dev 访问您的 Worker。您的浏览器应该显示从远程 D1 数据库查询到的以下数据:

[{ "id": 1, "email": "jane@prisma.io", "name": "Jane Doe (Remote)" }]

通过完成本教程,您已成功部署了一个将 D1 用作数据库并使用 Prisma ORM 对其进行查询的 Cloudflare Worker。

相关资源

这篇文档对您有帮助吗?