Skip to content

Prisma 模型语法

模型语法就是通过模型能够直接调用的方法

findUnique()

查询允许你检索单个数据库记录

  • 代码
ts
const user = await prisma.user.findUnique({
  where: {
    id: 17,
  },
});
console.log(user);
  • 返回值

注意

  1. 查询不到就返回 null

  2. 查询的到就返回结果

findUniqueOrThrow()

查询允许你检索单个数据库记录

如果找不到记录,则抛出错误

ts
async function main() {
  try {
    const result = await prisma.emp.findUniqueOrThrow({
      where: {
        id: 100,
      },
    });
    console.log(result);
  } catch (e) {
    console.log("异常");
    console.log(e);
  }
}
  • 返回值

注意

  1. 查询不到就抛出异常

  2. 查询的到就返回结果

findFirst()

findFirst 返回列表中符合你的条件的第一条记录

  • 代码
ts
const user = await prisma.user.findFirst({
  where: {
    id: {
      gte: 1,
    },
  },
});
console.log(user);
  • 返回结果

注意

  1. 查询不到就返回 null

  2. 查询的到就返回结果

findFirstOrThrow()

findFirstOrThrow 返回列表中符合你的条件的第一条记录

如果找不到记录,则抛出错误

  • 代码
ts
const user = await prisma.user.findFirst({
  where: {
    id: {
      gte: 1,
    },
  },
});
console.log(user);
  • 返回结果

注意

  1. 查询不到就抛出异常

  2. 查询的到就返回结果

findMany()

findMany 返回一个包含所有符合你条件的记录的列表

  • 代码
ts
const user = await prisma.user.findMany({
  where: {
    id: {
      gt: 1,
    },
  },
});
console.log(user);
  • 返回结果

注意

  1. 查询不到就返回空数组

  2. 查询的到就返回结果

create()

创建单个对象

  • 代码
ts
const user = await prisma.user.create({
  data: {
    name: "Alice", // 字段名: 字段值
    password: "alice@prisma.io",
  },
});
  • 返回值(创建成功后的值)
bash
{
  id: 10,
  name: 'Alice2',
  password: 'alice@prisma.io'
}

createMany()

创建多条记录(用的多)

注意

通过返回值的 count 来确定插入成功没有

  • 代码
ts
const userall = await prisma.user.createMany({
  data: [
    {
      name: "Alice2",
      password: "alice@prisma.io",
    },
    {
      name: "Bob2",
      password: "bob@prisma.io",
    },
  ],
});
  • 返回值
ts
{
  count: 2;
} // 2 条记录被创建 2就是对应的data数组中的对象个数

update()

更新单个对象

  • 代码
ts
const updateUser = await prisma.user.update({
  where: {
    id: 2,
  },
  data: {
    name: "jsopy",
  },
});
console.log(updateUser);
  • 返回值
bash
{
  id: 2,
  name: 'jsopy',
  password: 'alice@prisma.io',
  createdAt: 2025-09-29T05:32:03.929Z
}

updateMany()

更新多条记录

  • 代码
ts
const updateUser = await prisma.user.updateMany({
  where: {
    password: "alice@prisma.io",
  },
  data: {
    name: "jsopy",
  },
});
console.log(updateUser);
  • 返回值
ts
{
  count: 2;
} // 2 条记录被更新 2就是对应的data数组中的对象个数

delete()

删除单个对象

  • 代码
ts
const deleteUser = await prisma.user.delete({
  where: {
    id: 2,
  },
});
console.log(deleteUser);
  • 返回值
bash

{
  id: 2,
  name: 'jsopy',
  password: 'alice@prisma.io',
  createdAt: 2025-09-29T05:32:03.929Z
}

deleteMany()

删除多条

  • 代码
ts
const deleteUsers = await prisma.user.deleteMany({
  where: {
    id: {
      gt: 10,
    },
  },
});
  • 返回值
ts
{
  count: 3; // 删除几条就是几条
}
  • 删除所有记录
ts
const deleteUsers = await prisma.user.deleteMany();

count()

  • 代码
ts
const result = await prisma.dept.count({
  where: {
    id: {
      gt: 2,
    },
  },
});
console.log(result);
  • 返回值
ts
4; // 返回符合条件的记录数

null 和非 null

  • 代码
ts
const result = await prisma.emp.count({
  select: {
    _all: true,
    job: true,
  },
});
console.log(result);
  • 返回值
ts
{ _all: 17, job: 16 } // _all表示返回所有包含null和非null的记录数 job表示返回所有非null的job字段记录数

aggregate()

获取所有条数,最大值,最小值,求和,平均值 等

  • 代码
ts
const result = await prisma.emp.aggregate({
  _count: {
    _all: true, // 所有的个数
  },
  _avg: {
    age: true, // 年龄平均值
  },
  _sum: {
    age: true, // 年龄总和
  },
  _min: {
    age: true, // 年龄最小值
  },
  _max: {
    age: true, // 年龄最大值
  },
});
console.log(result);
  • 返回值
ts
{
  _count: { _all: 17 },
  _avg: { age: 38.4118 },
  _sum: { age: 653 },
  _min: { age: 19 },
  _max: { age: 88 }
}

groupBy()

分组

  • 代码

查询每个部门年龄的平均值,年龄总和,年龄最大值,年龄最小值,年龄个数

ts
const result = await prisma.emp.groupBy({
  by: ["job"],
  _count: {
    _all: true, // 所有的个数
  },
  _avg: {
    age: true, // 年龄平均值
  },
  _sum: {
    age: true, // 年龄总和
  },
  _min: {
    age: true, // 年龄最小值
  },
  _max: {
    age: true, // 年龄最大值
  },
});
console.log(result);
  • 返回结果
ts
[
  {
    _count: { _all: 1 },
    _avg: { age: 66 },
    _sum: { age: 66 },
    _min: { age: 66 },
    _max: { age: 66 },
    job: "总裁",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 20 },
    _sum: { age: 20 },
    _min: { age: 20 },
    _max: { age: 20 },
    job: "项目经理",
  },
  {
    _count: { _all: 3 },
    _avg: { age: 41.3333 },
    _sum: { age: 124 },
    _min: { age: 33 },
    _max: { age: 48 },
    job: "开发",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 19 },
    _sum: { age: 19 },
    _min: { age: 19 },
    _max: { age: 19 },
    job: "程序员鼓励师",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 60 },
    _sum: { age: 60 },
    _min: { age: 60 },
    _max: { age: 60 },
    job: "财务总监",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 19 },
    _sum: { age: 19 },
    _min: { age: 19 },
    _max: { age: 19 },
    job: "会计",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 23 },
    _sum: { age: 23 },
    _min: { age: 23 },
    _max: { age: 23 },
    job: "出纳",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 20 },
    _sum: { age: 20 },
    _min: { age: 20 },
    _max: { age: 20 },
    job: "市场部总监",
  },
  {
    _count: { _all: 3 },
    _avg: { age: 31.3333 },
    _sum: { age: 94 },
    _min: { age: 19 },
    _max: { age: 56 },
    job: "职员",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 88 },
    _sum: { age: 88 },
    _min: { age: 88 },
    _max: { age: 88 },
    job: "销售总监",
  },
  {
    _count: { _all: 2 },
    _avg: { age: 39 },
    _sum: { age: 78 },
    _min: { age: 38 },
    _max: { age: 40 },
    job: "销售",
  },
  {
    _count: { _all: 1 },
    _avg: { age: 42 },
    _sum: { age: 42 },
    _min: { age: 42 },
    _max: { age: 42 },
    job: null,
  },
];