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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenKylin安装MySQL

在麒麟操作系统上安装MySQL&#xff0c;可以通过以下步骤进行&#xff1a; 1、更新系统包列表&#xff1a; sudo apt-get update2、安装MySQL服务 sudo apt-get install mysql-server3、进行安全设置&#xff0c;设置root密码和是否允许匿名登陆之类 sudo mysql_secure_ins…

Redis数据库②高可用+持久化+性能管理

目录 一.高可用 二.持久化 1.Redis 提供两种方式进行持久化 2.RDB 持久化 &#xff08;1&#xff09;手动触发 &#xff08;2&#xff09;自动触发 &#xff08;3&#xff09;执行流程 &#xff08;4&#xff09;启动时加载 3.AOF持久化 &#xff08;1&#xff09;开…

SpringBoot整合Flowable/Activiti

SpringBoot版本: 2.0.1.RELEASE Flowable版本: 6.3.1 Activiti版本: 6.0.0 一.添加pom依赖 因为之前我整合的时候有报错关于sqlsession的错误,后面查询文章才发现flowable要排除掉mybatis,又没说具体排除哪一个,所以我这干脆全部排除了 <!-- Flowable dependencies -->…

【Java SE】继承

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 继承1.1 继承是什么1.2 继承的意义1.3 继承的语法1.4 继承的方式1.5 子类中访问父类成员1.5.1 子类中访问…

js类型转换

类型转换只有这四种&#xff0c;例如如果要对象转数字&#xff0c;那么就需要先把对象转成原始类型&#xff0c;再从原始类型转到数字。 空数组转原始类型是一个空字符串。空对象转原始类型是[object Object]。 let a {} console.log(a);// NaN //等价于 a->原始 然后原始…

北京大学创新推出ManipLLM黑科技 | 大幅提升机器人操作的鲁棒性与智能性

机器人操作依赖于准确预测接触点和执行器方向以确保成功操作。然而&#xff0c;基于学习的机器人操作&#xff0c;在模拟器中仅针对有限类别进行训练&#xff0c;往往难以实现泛化&#xff0c;特别是在面临大量类别时。 因此&#xff0c;作者提出了一种创新的方法&#xff0c;…

网络安全基础之网络协议与安全威胁

OSI(OpenSystem Interconnect)&#xff0c;即开放式系统互联。 一般都叫OSI参考模型&#xff0c;是ISO(国际标准化组织)组织在1985年研究的网络互联模型。 网络协议的简介&#xff1a; 定义&#xff1a;协议是网络中计算机或设备之间进行通信的一系列规则集合。 什么是规则?…

Android操作sqlite数据库

Sqlite数一种轻量级的关系型数据库&#xff0c;android里面可以用来持久化存储一些用户数据。 一、SQLiteOpenHelper方式 SQLiteOpenHelper是原生的数据库帮助类&#xff0c;继承这个类&#xff0c;用来创建&#xff0c;更新数据库的操作 public class MySqliteOpenHelper e…

算法整理:链表

链表定义 struct ListNode { int val;ListNode *next;ListNode(int x) : val(x), next(nullptr) {} }; 链表的遍历&#xff1a;ListNode phead; while(p!null) pp.next; 找到链表的尾结点&#xff1a;phead; while(p.next!null)pp.next; 链表节点的个数&#xff1a; phead…

蓝桥杯真题:七段码

import java.util.Scanner; import java.util.ArrayList; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args){// 连接关系图int[][] map new int[][]{{0, 1, 0, 0, 0, 1, 0},{1, 0, 1, 0, 0, 0, 1},{0, 1, 0, 1, 0, 0…

通讯录项目实现

引言&#xff1a;通过顺序表的逻辑实现通讯录。这里就不讲关于顺序表的函数了。如果有不明白的可以看我写的顺序表的博客。 目录 顺序表与通讯录的比较 各源文件文件大榄 Contact.c中通讯录相关函数的定义 初始化和销毁通讯录 添加联系人&#xff1a; 删除联系人&#xf…

c++的学习之路:10、string(2)

本章主要说一下模拟实现string类的部分功能&#xff0c;文章末附上所有代码。 目录 一、构造函数与析构函数 二、拷贝构造 三、c_str 四、【】和迭代器的遍历与访问 五、size 六、判断 七、reserve 八、push_back 九、resize 十、append 十一、 十二、insert 十…

Redis的5大常见数据类型的用法

上一篇文章我们讲了Redis的10大应用场景&#xff0c;这一篇文章就针对Redis的常用数据结构进行一个说明&#xff0c;通过示例的形式演示每一种数据结构如何使用。 当涉及Redis的数据操作时&#xff0c;不同数据类型对应的不同数据结构&#xff0c;如下就对5大常用的数据类型进行…

Transformer,革命性的深度学习架构

Transformer 是一种革命性的深度学习架构&#xff0c;专门设计用于处理序列数据&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;任务中表现卓越。它由 Vaswani 等人在 2017 年发表的论文《Attention is All You Need》中首次提出&#xff0c;打破了当时基于循环神…

2024最新版Android studio安装入门教程(非常详细)

目录 JDK安装与配置 一、下载JDK 二、JDK安装 三、JDK的环境配置 四、JDK的配置验证 Android studio安装 Android studio连接手机真机调试&#xff08;以华为鸿蒙为例&#xff09; 一、新建一个android项目 二、进入项目面板 三、配置Android Studio 四、安装手机驱…

【linux】进程替换的应用|shell解释器的实现

当我们学过了进程替换之后&#xff0c;本篇文章可以根据进程替换的知识带你自主实现一个shell命令行 实现步骤 1.显示命令行提示 2.读取输入指令以及对应选项 3.分割第二步的指令以及选项到命令行参数表中 4.处理内建命令 5.进程替换 1.显示命令行提示 我们通过观察bash的命令行…

Linux 文件相关命令

一、查看文件命令 1&#xff09;浏览文件less 默认查看文件的前 10 行。 less /etc/services ##功能说明&#xff1a; #1.默认打开首屏内容 #2.按【回车】按行访问 #3.按【空格】按屏访问 #4.【从上向下】搜索用/111,搜索包含111的内容&#xff0c;此时按n继续向下搜&#x…

JAVAEE之IoCDI

Spring 是⼀个 IoC&#xff08;控制反转&#xff09;容器&#xff0c;作为容器, 那么它就具备两个最基础的功能&#xff1a; • 存 • 取 Spring 容器管理的主要是对象, 这些对象, 我们称之为"Bean". 我们把这些对象交由Spring管理, 由 Spring来负责对象的创建…

想学网络安全,从哪里开始?网络安全的学习路线

网络安全学习路线&#xff1a; 想学习网络安全专业的知识&#xff0c;想当黑客&#xff0c;但是不知道该从哪里开始学。 我给你一个路线&#xff01; 清晰图片和大纲&#xff1a;https://docs.qq.com/doc/DU1lpVFpSbWVrd2p3

面试官:为什么忘记密码要重置,而不是告诉我原密码?

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 最近有个同学在面试中遇到了一个很有意思的问题&#xff0c;我相信大多…