Prisma ORM ↗ 是下一代 JavaScript 和 TypeScript ORM,凭借其直观的数据模型、自动化迁移、类型安全和自动补全,在使用数据库时提供全新的开发者体验。
要了解更多关于 Prisma ORM 的信息,请参阅 Prisma 文档 ↗。
本教程展示如何从头开始设置和部署访问 D1 数据库的 Cloudflare Worker。
如果您想跳过步骤快速开始,请选择下面的 Deploy to Cloudflare(部署到 Cloudflare)。
这将在您的 GitHub 账户中创建一个仓库,并将应用程序部署到 Cloudflare Workers。如果您熟悉 Cloudflare Workers 并希望跳过分步指导,请使用此选项。
如果您是 Cloudflare Workers 新用户,可能需要手动按照步骤操作。
- 在您的计算机上安装了
Node.js↗ 和npm↗。 - 一个 Cloudflare 账户 ↗。
打开终端,运行以下命令使用 Cloudflare 的 hello-world ↗ 模板创建 Cloudflare Worker:
npm create cloudflare@latest prisma-d1-example -- --type hello-world在终端中,您将被问及一系列与您的项目相关的问题:
- 对于是否使用 TypeScript,回答
yes。 - 对于是否部署 Worker,回答
no。
要设置 Prisma ORM,请进入您的项目目录,并安装 Prisma CLI:
cd prisma-d1-examplenpm i -D prismayarn add -D prismapnpm add -D prismabun add -d prisma接下来,安装 Prisma Client 包和 D1 驱动适配器:
npm i @prisma/client @prisma/adapter-d1yarn add @prisma/client @prisma/adapter-d1pnpm add @prisma/client @prisma/adapter-d1bun add @prisma/client @prisma/adapter-d1最后,使用以下命令引导 Prisma ORM 所需的文件:
npx prisma init --datasource-provider sqliteyarn prisma init --datasource-provider sqlitepnpm prisma init --datasource-provider sqlite上述命令将:
- 创建一个名为
prisma的新目录,其中包含您的 Prisma schema ↗ 文件。 - 创建一个
.env文件,用于配置将由 Prisma CLI 读取的环境变量。
在本教程中,您将不需要 .env 文件,因为 Prisma ORM 和 D1 之间的连接将通过绑定 (binding)进行。接下来的步骤将指导您设置此绑定。
由于您将使用目前处于 Preview 的驱动适配器 ↗功能,您需要通过 generator 块上的 previewFeatures 字段显式启用它。
打开您的 schema.prisma 文件并调整 generator 块使其如下所示:
generator client {
provider = "prisma-client-js"
output = "../src/generated/prisma"
previewFeatures = ["driverAdapters"]
}在此步骤中,您将设置您的 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 发送查询。
Prisma Migrate ↗ 尚未支持 D1,因此您无法遵循使用 prisma migrate dev 或 prisma 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
- migrations
接下来,您需要向该文件中添加将创建 User 表的 SQL 语句。
打开 schema.prisma 文件,并将以下 User 模型添加到您的 schema 中:
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.sqlnpx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prisma --script --output migrations/0001_create_user_table.sql这会将用于创建新 User 表的 SQL 语句存储到您之前的迁移文件中,示例如下:
-- 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要使用 Prisma ORM 从 Worker 查询您的数据库,您需要:
- 将
DB添加到Env接口。 - 使用
PrismaD1驱动适配器实例化PrismaClient。 - 使用 Prisma Client 发送查询并返回结果。
打开 src/index.ts 并将全部内容替换为以下内容:
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);
},
};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现在您已经设置好数据库查询并生成了 Prisma Client,可以在本地运行 Worker:
npm run dev在浏览器中打开 http://localhost:8787 ↗ 以检查数据库查询的结果:
[{ "id": 1, "email": "jane@prisma.io", "name": "Jane Doe (Local)" }]要部署 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。