这些是有关如何在以 Cloudflare D1 作为数据库的 Cloudflare Workers 或页面上使用 Prisma ORM 的说明。这是 ⏱️Prisma + Edge Functions 抢先体验的一部分。
介绍
欢迎抢先体验 Prisma ORM 中的边缘功能部署支持!通过此抢先体验,您可以在 Cloudflare Workers 或 Cloudflare Pages 上使用 Prisma Client,并将 Cloudflare D1 作为数据库。
如果您想将 Cloudflare 上的 Prisma 与其他数据库(例如 PostgreSQL、Neon、PlanetScale 或 Turso)一起使用,或者在 Vercel Edge Functions 或中间件上使用,请查看我们的常规 ⏱️Prisma + Edge Functions 早期访问页面。
如何使用
要使用早期访问版本通过 Prisma 在 Cloudflare Workers 或 Pages 上测试 D1,请按照以下说明操作:
安装
在早期访问期间,您可以使用 Prisma CLI 和 Prisma Client 的特殊 @early-access
版本。稍后,当我们达到预览版时,这将作为我们正常、稳定版本的一部分提供。
npm install prisma@early-access
npm install @prisma/client@early-access
npm install @prisma/adapter-d1@early-access
npm install @cloudflare/workers-types --save-dev
npm install wrangler --save-dev
用法
要启用对 Cloudflare 和 D1 驱动程序适配器上的边缘功能部署的支持,您需要在 Prisma 架构的 generator
中使用 driverAdapters
预览功能:
// schema.prisma
generator client {
provider = "prisma-client-js"
+ previewFeatures = ["driverAdapters"]
}
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
运行 npx prisma generate
重新生成 Prisma 客户端。
然后在 wrangler.toml
中设置 D1 数据库:
[[d1_databases]]
binding = "DATABASE" # i.e. available in the Worker on env.DATABASE
database_name = "database_name"
database_id = "<unique-ID-for-your-database>"
(对于 Cloudflare Pages,绑定的配置略有不同。)
- 在您的应用程序中,导入
@prisma/client
和 Prisma D1 驱动程序适配器。 - 为 D1 数据库定义一个与
wrangler.toml
中的定义匹配的绑定。 - 在您的工作代码中,您现在可以向
PrismaD1
驱动程序适配器提供数据库 API,在本例中是通过env.DATABASE
并将适配器提供给PrismaClient()
。 - 然后,照常使用
prisma
。
// code e.g. src/index.ts
import {
PrismaClient } from '@prisma/client'
import {
PrismaD1 } from '@prisma/adapter-d1'
export interface Env {
DATABASE: D1Database
}
export default {
async fetch(request, env, ctx) {
const adapter = new PrismaD1(env.DATABASE)
const prisma = new PrismaClient({
adapter })
const users = await prisma.user.findMany()
const result = JSON.stringify(users)
return new Response(result);
}
}
迁移与内省
Cloudflare D1 目前不支持 Prisma 的迁移和内省工作流程。我们建议像往常一样使用本地 SQLite 数据库使用 prisma migrate dev
或 prisma migrate diff
创建迁移文件,然后使用 wrangler CLI execute
功能将它们应用到在线 D1 数据库。
npx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prisma --script > schema.sql
# For the local database
npx wrangler d1 execute your_database_name --file=schema.sql --local
# For the remote database
npx wrangler d1 execute your_database_name --file=schema.sql --remote
Transactions
Cloudflare D1 目前不支持非批量事务。当使用 Prisma 的 D1 适配器时,隐式和显式事务将被忽略并作为单独的查询运行,这破坏了事务的 ACID 属性的保证。请对链接的问题进行投票,以表明您希望 Cloudflare 向 D1 添加交易支持。