prisma的增删改查

news2024/11/21 0:28:16

目录

  • 一、单表
    • 1.增
    • 自增问题
    • 2.查询所有信息
    • 3.查询以l开头的数据
    • 4.查询限定数据
    • 5.查询唯一的数据
    • 6.分页查询
    • 7.改
    • 8.删
  • 二、联表
    • 1.新增文章
    • 2.将文章和用户关联
    • 3.查询用户的同时查询用户的文章
    • 4.关联查询(级联操作,链式调用)


一、单表

模型

model User {
  id    Int     @id @default(autoincrement()) //自增 主键
  createAt DateTime @default(now()) //默认当前时间
  updateAt DateTime @updatedAt //默认当前时间
  name  String?
  email String  @unique
}

1.增

//新增用户
const createUser = async (name: string, email: string) => {
  return await prisma.user.create({
    data: {
      name,
      email,
    },
  });
};

发送
在这里插入图片描述
再次发送
在这里插入图片描述

自增问题

假如有需要做访问量加一可以使用increment关键字通过数据库底层的操作,避免了分布式模式下的数据抢占问题,同时也不用去专门的去写一个加锁去加一

async function increment(id:int){
return await prisma.post.update({
where:{id:Number(id)}
}),
data:{
	viewCount:{
	increment:1
	}
}
}


2.查询所有信息

const getFindMany = async () => {
  return await prisma.user.findMany();
};
{
	"code": 200,
	"data": [
		{
			"id": 1,
			"createAt": "2023-08-16T05:54:56.108Z",
			"updateAt": "2023-08-16T05:54:56.108Z",
			"name": "liu",
			"email": "1@qq.com"
		},
		{
			"id": 7,
			"createAt": "2023-08-16T05:57:26.809Z",
			"updateAt": "2023-08-16T05:57:26.809Z",
			"name": "zzz",
			"email": "2@qq.com"
		}
	]
}

3.查询以l开头的数据

const getFindManyWhere = async () => {
  return await prisma.user.findMany({
    where: {
      name: {
        startsWith: "l",
      },
    },
  });
};
{
	"code": 200,
	"data": [
		{
			"id": 1,
			"createAt": "2023-08-16T05:54:56.108Z",
			"updateAt": "2023-08-16T05:54:56.108Z",
			"name": "liu",
			"email": "1@qq.com"
		}
	]
}

4.查询限定数据

const getFindManySelect = async () => {
  return await prisma.user.findMany({
    select: {
      id: true,
      name: true,
      // email:false 这个不行  开始的想法是只写email false 但是不行  
    },
  });
};
{
	"code": 200,
	"data": [
		{
			"id": 1,
			"name": "liu"
		},
		{
			"id": 7,
			"name": "zzz"
		}
	]
}

5.查询唯一的数据

prisma.user.findUnique({ where: { id } });

prisma.user.findUnique({ where: { id } });prisma.user.findMany({ where: { id } }) 都是使用 Prisma 进行数据库查询的方法,但它们之间有一些区别。

  1. prisma.user.findUnique({ where: { id } });

    • 这个方法用于查找满足特定条件的单个唯一记录。
    • 它期望返回一个单一的记录,或者如果没有找到匹配的记录,则返回 null
    • 这对于需要获取一条特定记录的情况非常有用,例如使用唯一的主键来查找用户的详细信息。
  2. prisma.user.findMany({ where: { id } })

    • 这个方法用于查找满足特定条件的多个记录。
    • 它返回一个记录数组,数组中包含满足查询条件的所有记录。
    • 这对于需要获取多个满足条件的记录的情况非常有用,例如查找所有具有特定属性的用户。

总之,findUnique 用于返回一个单一的唯一记录,而 findMany 用于返回多个记录。选择使用哪种方法取决于你想要的查询结果是单个记录还是多个记录。

6.分页查询

const getFindManySkip = async () => {
  return await prisma.user.findMany({
    skip: 0,//从skip开始(不包含skip)
    take: 1,//取几条
  });
};

skip 等于0 take等于1

{
	"code": 200,
	"data": [
		{
			"id": 1,
			"createAt": "2023-08-16T05:54:56.108Z",
			"updateAt": "2023-08-16T05:54:56.108Z",
			"name": "liu",
			"email": "1@qq.com"
		}
	]
}

skip 等于0 take等于2

{
	"code": 200,
	"data": [
		{
			"id": 1,
			"createAt": "2023-08-16T05:54:56.108Z",
			"updateAt": "2023-08-16T05:54:56.108Z",
			"name": "liu",
			"email": "1@qq.com"
		},
		{
			"id": 7,
			"createAt": "2023-08-16T05:57:26.809Z",
			"updateAt": "2023-08-16T05:57:26.809Z",
			"name": "zzz",
			"email": "2@qq.com"
		}
	]
}

7.改

where 里面填要查找的数据,data里面填要修改的数据

const updateUser = async (name: string, email: string) => {
  return await prisma.user.update({
    where: {
      email,
    },
    data: {
      name,
    },
  });
};

8.删

async function deleteUser(id) {
   try {
     const user = await prisma.user.delete({ where: { id } });
     return user;
  } catch (error) {
     console.error(error);
     // 处理错误
 } finally {
    await prisma.$disconnect();
 }
 }

二、联表

模型

model User {
  id    Int     @id @default(autoincrement()) //自增 主键
  createAt DateTime @default(now()) //默认当前时间
  updateAt DateTime @default(now()) //默认当前时间
  name  String?
  email String  @unique
  //[]表示一对多 一个User可以有多个Post
  posts Post[] //关联Post 如果不写这个 Post表的authorId字段会报错
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false) //默认false
  authorId  Int?
  //关联User fields: [authorId] 为Post的字段,references: [id] 为User的字段
  author    User?   @relation(fields: [authorId], references: [id])
}

1.新增文章

const createArticle = async () => {
  return await prisma.post.create({
    data: {
      title: "hello world",
    },
  });
};
{
	"code": 200,
	"data": {
		"id": 4,
		"title": "hello world",
		"content": null,
		"published": false,
		"authorId": null
	}
}

2.将文章和用户关联

const updateArticle = async (id: number, title: string) => {
  return await prisma.post.update({
    where: {
      id: 4,
    },
    //即根据email字段查询user表,然后将查询到的user表的id字段赋值给authorId字段
    data: {
      author: { connect: { email: "1@qq.com" } },
    },
  });
};
{
	"code": 200,
	"data": {
		"id": 4,
		"title": "hello world",
		"content": null,
		"published": false,
		"authorId": 1  //这里是根据1@qq.com的Id来决定的
	}
}

3.查询用户的同时查询用户的文章

const findUser = async () => {
  return await prisma.user.findUnique({
    where: {
      email: "1@qq.com",
    },
    //下面这句话表示将与user表关联的表也查询出来
    include: {
      posts: true,
    },
  });
};
{
	"code": 200,
	"data": {
		"id": 1,
		"createAt": "2023-08-16T05:54:56.108Z",
		"updateAt": "2023-08-16T05:54:56.108Z",
		"name": "liu",
		"email": "1@qq.com",
		"posts": [
			{
				"id": 4,
				"title": "hello world",
				"content": null,
				"published": false,
				"authorId": 1
			}
		]
	}
}

4.关联查询(级联操作,链式调用)

查询了用户表要查询它的关联表中的某种数据

const findUserDraft = async () => {
  return await prisma.user
    .findUnique({
      where: {
        email: "",
      },
    })
    .posts({
      where: {
        published: false,
      },
    });
};

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

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

相关文章

腾讯云轻量服务器测评:2核 2G 4M

腾讯云轻量2核2G4M服务器,4M带宽下载速度可达512KB/秒,系统盘为50GB SSD盘,300GB月流量,地域节点可选上海、广州和北京,腾讯云百科分享腾讯云2核2G4M轻量应用服务器配置性能表: 目录 腾讯云轻量2核2G4M服…

Spring MVC 中的常见注解的用法

目录 认识 Spring MVC什么是 Spring MVCMVC 的定义 Spring MVC 注解的运用1. Spring MVC 的连接RequestMapping 注解 2. 获取参数获取单个参数获取多个参数传递对象表单传参后端参数重命名RequestBody 接收 JSON 对象PathVariable 获取 URL 中的参数上传文件 RequestPart获取 C…

最小生成树,Kruskal算法

最小生成树(Minimum Spanning Tree,简称 MST)是一个连通图的子图,它包含图中的所有节点,并且是一个树(无环连通图),同时保证连接所有节点的边的权重之和最小。 在一个带权重的连通图…

R语言实现非等比例风险生存资料分析(1)

#非等比例风险的生存资料分析 ###1 生成模拟数据### library(flexsurv) set.seed(123) # 生成样本数量 n <- 100 # 生成时间数据 time <- sample(1:1000,n,replaceF) # 调整shape和scale参数以控制生存曲线形状 # 生成事件数据&#xff08;假设按比例风险模型&#xff0…

【SpringBoot】中的ApplicationRunner接口 和 CommandLineRunner接口

1. ApplicationRunner接口 用法&#xff1a; 类型&#xff1a; 接口 方法&#xff1a; 只定义了一个run方法 使用场景&#xff1a; springBoot项目启动时&#xff0c;若想在启动之后直接执行某一段代码&#xff0c;就可以用 ApplicationRunner这个接口&#xff0c;并实现接口…

YB2416是支持高电压输入的同步降压电源管理芯片

简介&#xff1a; YB2416是支持高电压输入的同步降压电源管理芯片&#xff0c;在 4~30V 的宽输入电压范围内可实现3A的连续电流输出。通过调节 FB 端口的分压电阻&#xff0c;可以输出1.8V到28V的稳定电压。YB2416具有优秀的恒压/恒流(CC/C)特性。YB2416 采用电流模式的环路控制…

UI自动化测试常见的Exception

一. StaleElementReferenceException&#xff1a; - 原因&#xff1a;引用的元素已过期。原因是页面刷新了&#xff0c;此时当然找不到之前页面的元素。- 解决方案&#xff1a;不确定什么时候元素就会被刷新。页面刷新后重新获取元素的思路不变&#xff0c;这时可以使用python的…

【云原生】【k8s】从小白到大神之路之学习运维第82天-------基于Prometheus监控Kubernetes集群

第四阶段 时 间&#xff1a;2023年8月17日 参加人&#xff1a;全班人员 内 容&#xff1a; 基于Prometheus监控Kubernetes集群 目录 一、Prometheus简介 &#xff08;一&#xff09;Prometheus的基本原理 &#xff08;二&#xff09;Prometheus优势 &#xff08;三&a…

java.security.InvalidKeyException: Illegal key size

JDK受版本安全限制&#xff0c;默认只允许128位长度以内的。秘钥长度&#xff0c;如果密钥大于128, 会抛出java.security.InvalidKeyException: Illegal key size 异常. java运行时环境默认读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美…

【IMX6ULL驱动开发学习】06.DHT11温湿度传感器驱动程序编写与测试

一、DHT11简介 DHT11是一款可测量温度和湿度的传感器。比如市面上一些空气加湿器&#xff0c;会测量空气中湿度&#xff0c;再根据测量结果决定是否继续加湿。 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器&#xff0c;具有超小体积、极低功耗的特点…

配置 autofs

配置 autofs 配置 autofs&#xff0c;按照以下要求自动挂载远程用户的家目录&#xff0c;要求如下&#xff1a; host.domain8.rhce.cc ( 172.25.250.250 ) NFS 导出 /rhome 到您的系统。此文件系统包含 为用户 remoteuser1 预配置的主目录 remoteuser1 的主目录是 host.dom…

【快速解决】尝试卸载 Office 时出现错误代码 30029-4,解决office安装报错等问题,解决无法安装office的问题

目录 ​编辑 前言&#xff08;本文可以快速解决你遇到的问题&#xff09; 问题描述 解决无法安装问题的步骤分为以下两个主要阶段&#xff1a; 第一步&#xff1a;卸载现有的 Office 软件 第二步&#xff1a;安装所需的新版 Office 安装步骤如下&#xff1a; 1.启动微信…

看完《孤注一掷》:原来这类人最容易被电信诈骗!

最近&#xff0c;你看了诈骗电影《孤注一掷》吗&#xff1f; “想成功先发疯&#xff0c;不顾一切向钱冲&#xff1b;拼一次富三代&#xff0c;拼命才能不失败&#xff1b;今天睡地板&#xff0c;明天当老板&#xff01;”诈骗工厂里的被骗去打黑工的人们一次次高呼着朗朗上口…

基于Java+SpringBoot+vue前后端分离企业oa管理系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【LangChain】P0 LangChain 是什么与准备工作

LangChain 是什么与准备工作 LangChain 是什么&#xff1f;所谓增强数据感知所谓与环境互动 Get Started下载安装 langchain下载安装 openai获取 OpenAI API Key通过名为 openai_api_key 的参数传递密钥 LangChain 是什么&#xff1f; LangChain 是一个利用语言模型开发应用程序…

YOLOv8改进后效果

数据集 自建铁路障碍数据集-包含路障&#xff0c;人等少数标签。其中百分之八十作为训练集&#xff0c;百分之二十作为测试集 第一次部署 版本&#xff1a;YOLOv5 训练50epoch后精度可达0.94 mAP可达0.95.此时未包含任何改进操作 第二次部署 版本&#xff1a;YOLOv8改进版本 首…

“智”创未来,引领信息化新风潮,数字转型再添强动力

如今企业信息化已经成为了现代商业发展的大势所趋。信息化的浪潮不但带来了新的机遇&#xff0c;也对企业提出了更高的要求。企业需要借助科技的力量&#xff0c;实现数字化、智能化、高效化的转型&#xff0c;以应对激烈的市场竞争。 湖南远跃作为国内领先的信息一体化 解决方…

【Linux】进程的基本属性|父子进程关系

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;Linux仓库 个人专栏&#xff1a;Linux专栏 分享一句喜欢的话&#xff1a;热烈的火焰&#xff0c;冰封在最沉默的火山深处 文章目录 前言进程属性1.进程PID和PPID2.fork函数创建子进程1&#xff09;为什…

炫酷UI前端效果的CSS生成工具

提升设计人员和前端开发人员的工作 推荐炫酷UI前端效果的CSS生成工具1.Neumorphism2.带有渐变的图标3.Interactions4.大型数据库5.动画6.Mask7.动画按钮8. 自定义形状分隔线9.背景图案10. SVG波浪推荐炫酷UI前端效果的CSS生成工具 1.Neumorphism 地址:https://neumorphism.i…

Python案例|Pandas正则表达式

字符串的处理在数据清洗中占比很大。也就是说,很多不规则的数据处理都是在对字符串进行处理。Excel提供了拆分、提取、查找和替换等对字符串处理的技术。在Pandas中同样提供了这些功能,并且在Pandas中还有正则表达式技术的加持,让其字符串处理能力更加强大。 01、正则 正则就是…