Prisma ORM + Cloudflare + D1

这些是有关如何在以 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 devprisma 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 添加交易支持。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willin 老王带你躺平养老

感谢你这么好看还这么慷慨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值