Prisma Client API 概览

Prisma Client 提供了一组用于执行数据库操作的 API,支持 查询(find)、创建(create)、更新(update)、删除(delete) 等常见操作。以下是一些常见的 Prisma Client API 方法:

  1. findUnique / findFirst:查询单个记录。
  2. findMany:查询多个记录。
  3. create:创建新记录。
  4. update:更新已有记录。
  5. delete:删除记录。
  6. upsert:根据条件更新或创建记录。
  7. connect / disconnect:用于建立或断开关系。
  8. include / select:用于选择返回字段或嵌套查询。

### 基本操作示例

1. 查询操作

findUnique 和 findFirst 是用来查询单条记录的 API,区别在于 findUnique 要求查询字段是唯一的,而 findFirst 可以根据排序条件返回第一条记录。

// 使用 findUnique 查询
const user = await prisma.user.findUnique({
  where: {
    email: "example@example.com", // 这里是唯一约束
  },
});

// 使用 findFirst 查询
const firstPost = await prisma.post.findFirst({
  where: {
    published: true,
  },
  orderBy: {
    createdAt: 'desc',
  },
});

2. 创建操作

create 用于创建新记录。你可以在 data 字段中提供需要插入的字段。

const newUser = await prisma.user.create({
  data: {
    name: "Alice",
    email: "alice@example.com",
    posts: {
      create: [
        {
          title: "My First Post",
          content: "This is the content of my first post",
        },
      ],
    },
  },
});

3. 更新操作

update 用于更新现有记录,where 条件用于指定要更新的记录,data 字段指定要更新的字段。

const updatedUser = await prisma.user.update({
  where: {
    email: "alice@example.com", // 根据唯一字段查询
  },
  data: {
    name: "Alice Updated",
    posts: {
      update: {
        where: { id: 1 },
        data: {
          title: "Updated Post Title",
        },
      },
    },
  },
});

4. 删除操作

delete 用于删除记录,通常根据唯一字段或主键来查找并删除记录。

const deletedUser = await prisma.user.delete({
  where: {
    email: "alice@example.com",
  },
});

5. 关联操作

connect 和 create 用于处理关联数据。假设有 Post 和 User 表,Post 表有一个外键 userId 关联到 User 表。

使用 connect 关联已存在的记录:

const updatedPost = await prisma.post.update({
  where: {
    id: 1,
  },
  data: {
    user: {
      connect: {
        id: 1, // 关联已存在的用户
      },
    },
  },
});

使用 create 创建新记录并关联:

const newPost = await prisma.post.create({
  data: {
    title: "New Post",
    content: "Content of the new post",
    user: {
      create: {
        name: "New User",
        email: "newuser@example.com",
      },
    },
  },
});

高级操作示例

1. 批量创建和批量更新

Prisma 支持批量操作,可以使用 createMany 和 updateMany 执行批量创建或更新操作。

批量创建多个用户:

const users = await prisma.user.createMany({
  data: [
    { name: "User 1", email: "user1@example.com" },
    { name: "User 2", email: "user2@example.com" },
  ],
});

批量更新多个记录:

const updatedUsers = await prisma.user.updateMany({
  where: {
    email: {
      in: ["user1@example.com", "user2@example.com"],
    },
  },
  data: {
    name: "Updated User",
  },
});

2. 事务(transaction)操作

Prisma 提供了 transaction 方法,可以将多个数据库操作组合在一起,确保操作的原子性。

const [newUser, newPost] = await prisma.$transaction([
  prisma.user.create({
    data: { name: "Bob", email: "bob@example.com" },
  }),
  prisma.post.create({
    data: { title: "Bob's Post", content: "Content of Bob's Post" },
  }),
]);

3. 复杂查询:include 和 select

include 和 select 用于指定返回数据的结构。select 用于选择返回哪些字段,include 可以用于嵌套查询和关联查询。

查询用户和他们的所有帖子:

const userWithPosts = await prisma.user.findUnique({
  where: {
    email: "alice@example.com",
  },
  include: {
    posts: true, // 包括用户的所有帖子
  },
});

查询用户并仅选择特定字段:

const userWithSelectedFields = await prisma.user.findUnique({
  where: {
    email: "alice@example.com",
  },
  select: {
    name: true, // 仅返回用户的名字
    email: true,
  },
});

4. 分页查询

Prisma 支持基于 skip 和 take 的分页操作。

const posts = await prisma.post.findMany({
  skip: 0, // 跳过前 0 条记录
  take: 10, // 获取接下来的 10 条记录
  orderBy: {
    createdAt: 'desc', // 按照创建时间降序排列
  },
});

5. 聚合查询

Prisma 也支持聚合操作,如 count、avg、sum、min、max。

const aggregateResult = await prisma.post.aggregate({
  _count: {
    comments: true, // 计算每个帖子评论的数量
  },
  _avg: {
    rating: true, // 计算帖子评分的平均值
  },
  _sum: {
    views: true, // 计算帖子观看的总数
  },
});
posted @ 2025-04-10 09:22  蜗牛般庄  阅读(88)  评论(0)    收藏  举报
Title
页脚 HTML 代码