昨晚,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。