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 添加交易支持。

### Prisma ORM 使用指南 Prisma 是一个现代化的数据库工具,用于简化与数据库交互[^2]。它提供了一个类型安全的ORM(对象关系映射),允许开发者通过类型化的方式定义数据库模型,并生成与数据库通信的代码,从而使数据库操作更加高效和可靠。 #### 安装 Prisma 为了使用 Prisma ORM,首先需要安装相关依赖项。以下是安装步骤: ```bash npm install prisma @prisma/client npx prisma init ``` 上述命令会初始化 Prisma 并创建 `prisma/schema.prisma` 文件[^1]。 #### 配置数据库连接 在 `prisma/schema.prisma` 文件中,配置数据库连接信息。以下是一个 MySQL 数据库的示例配置: ```prisma datasource db { provider = "mysql" url = env("DATABASE_URL") # 格式:mysql://user:pass@host:port/db } ``` #### 定义数据模型 在同一个 `schema.prisma` 文件中,定义数据模型。例如,定义一个 `User` 表: ```prisma model User { id Int @id @default(autoincrement()) name String email String @unique } ``` #### 生成 Prisma Client 运行以下命令以生成 Prisma Client: ```bash npx prisma generate ``` #### 数据库迁移 为了将定义的模型同步到数据库,可以运行以下命令生成迁移文件并应用到数据库```bash npx prisma migrate dev --name init ``` #### 在项目中使用 Prisma 以下是一个在 Next.js 项目中使用 Prisma 的示例代码: ```typescript // app/api/users/route.ts import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); export async function GET() { const users = await prisma.user.findMany(); return Response.json(users); } ``` #### Prisma 文档参考 Prisma 提供了详尽的文档和教程,帮助开发者快速上手。其文档结构通常包括以下几个部分: - **Guides**:包含各种使用指南和教程。 - **Concepts**:描述 Prisma 的核心概念和原理。 - **API Reference**:提供详细的 API 参考文档。 - **Getting Started**:入门教程,引导新手快速启动项目[^3]。 #### 示例项目 如果需要参考实际项目中的实现,可以查看以下 GraphQL 和 Prisma 结合的 TypeScript 示例项目: - **项目地址**: [https://gitcode.com/gh_mirrors/gr/graphql-prisma-typescript](https://gitcode.com/gh_mirrors/gr/graphql-prisma-typescript) - **项目介绍**: 该项目实现了基于 Prisma 和 graphql-yoga 的 Airbnb 克隆版 GraphQL 服务器[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Willin 老王躺平不摆烂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值