Prisma ORM 5.12 发布,支持 Cloudflare D1 数据库

时间:2024-04-04 11:37:44

昨晚,Prisma ORM 发布了 5.12.0 稳定版本,在此版本中 Prisma ORM 新增了对 Cloudflare D1 的预览支持,现在我们可以选择将本地的 SQLite 数据库逐步迁移到 Cloudflare 上面,从而实现无需额外成本即可构建处理大量用户的应用程序。

Cloudflare D1 预览支持

D1 是 Cloudflare 的 SQLite 数据库,可在使用 Cloudflare 部署应用程序时使用。

将 Prisma ORM 与 D1 结合使用时,我们可以继续使用 Prisma 模式语言对数据库进行建模,在 Prisma 模式中指定 sqlite 作为数据库提供程序,并使用 Prisma 客户端与数据库进行交互。

要在 Cloudflare Workers 或 Cloudflare Pages 上使用 Prisma ORM 和 D1,您需要将 sqlite 选项设置为您的数据库提供程序,并通过 driverAdapters 预览功能使用 @prisma/adapter-d1 数据库适配器,此功能是在 Prisma ORM 5.4.0 版本中发布的。

以下是在 Worker 中使用 Prisma 客户端向 D1 数据库发送查询的示例:

import { PrismaClient } from '@prisma/client'
import { PrismaD1 } from '@prisma/adapter-d1'

// 将 D1Database 添加到 Env 类型接口
export interface Env {
// 这必须与您在 wrangler.toml 配置中定义的绑定名称相匹配
  DB: D1Database
}

export default {
  async fetch(
    request: Request,
    env: Env,
    ctx: ExecutionContext
  ): Promise<Response> {
    // 确保数据库名称与 wrangler.toml 文件和 Env 接口中的绑定名称匹配
    const adapter = new PrismaD1(env.DB)
    // 使用 PrismaD1 驱动适配器实例化 Prisma 客户端
    const prisma = new PrismaClient({ adapter })

    const users = await prisma.user.findMany()
    const result = JSON.stringify(users)
    return new Response(result)
  },
}

SQLite 支持 createMany()

在 SQLite 中引入对 createMany() 的支持是一项期待已久且强烈要求的功能。

createMany() 是 Prisma 客户端上的一种方法,在 2.16.0 版本中发布,可让您一次将多条记录插入数据库。这在为数据库播种或插入批量数据时非常有用。

以下是使用 createMany() 创建新用户的示例:

const users = await prisma.user.createMany({
  data: [
    { name: 'Sonali', email: 'sonali@prisma.io' },
    { name: 'Alex', email: 'alex@prisma.io' },
    { name: 'Yewande', email: 'yewande@prisma.io' },
    { name: 'Angelina', email: 'angelina@prisma.io' },
  ],
})

在此版本之前,如果您想使用 SQLite 执行批量插入,您很可能使用 $queryRawUnsafe 来执行原始 SQL 查询,但现在你不必经历所有这些麻烦。

使用 SQLite 的 createMany() 在 API 方面的工作方式与其他数据库完全相同,只是它不支持 skipDuplicates 选项。

在行为层面上,当您的架构中的模型包含像 @default(dbgenerated())@default(autoincrement())这样的属性字段,并且在条目之间没有一致提供值时,SQLite 将把 createMany() 条目分割成多个 INSERT 查询。

修复和改进

Prisma 客户端:

  • Decimal 数据类型和组合查询问题
  • 当字段为 Boolean 类型时批量 findUnique() 错误输出
  • relationJoins MySQL 将嵌套的 Decimal 转换为 float
  • 使用 findUnique() 时意外查询导致查询全表
  • Prisma 客户端已知请求错误
  • D1 DateTime 类型不起作用

以上就是本期 Prisma ORM 5.12 版本带来的全部更新内容,感谢 Prisma 开发团队及所有贡献者的辛勤付出,给我们带来一款如此高效便捷的 TypeScript ORM。