Prisma 中文文档 下载 App

第一次查询:从 findMany 到 create 的完整示例

准备数据库

Schema 和 Client 都就绪了,但数据库里还没有真实的表结构。先把 Schema 同步到数据库:

npx prisma migrate dev --name init

这条命令会:

  1. 读取 schema.prisma
  2. 生成一条 create_* 迁移文件,里面包含建表 SQL
  3. 应用迁移到数据库
  4. 自动触发 prisma generate

执行完后,你的数据库里就有了 User 表和 Post 表。

写查询脚本

创建一个 main.ts 文件来演示各种基本操作:

// src/main.ts
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

async function main() {
  // --- 创建一条记录 ---
  const user = await prisma.user.create({
    data: {
      email: 'alice@prisma.io',
      name: 'Alice',
      posts: {
        create: {
          title: 'Hello Prisma',
          content: 'This is my first post',
          published: true,
        },
      },
    },
  })
  console.log('Created user:', user)

  // --- 查询所有用户 ---
  const allUsers = await prisma.user.findMany()
  console.log('All users:', allUsers)

  // --- 查询并包含关联数据 ---
  const usersWithPosts = await prisma.user.findMany({
    include: { posts: true },
  })
  console.log('Users with posts:', usersWithPosts)

  // --- 带筛选条件的查询 ---
  const publishedPosts = await prisma.post.findMany({
    where: { published: true },
    orderBy: { createdAt: 'desc' },
  })
  console.log('Published posts:', publishedPosts)

  // --- 更新一条记录 ---
  const updatedPost = await prisma.post.update({
    where: { id: 1 },
    data: { published: false },
  })

  // --- 删除一条记录 ---
  await prisma.user.delete({
    where: { id: user.id },
  })
}

main()
  .catch(console.error)
  .finally(() => prisma.$disconnect())

运行脚本

npx ts-node src/main.ts

输出里你会看到:

程序结尾别忘断开连接

注意脚本末尾的 .finally(() => prisma.$disconnect())。Prisma Client 默认会维持数据库连接池,Node.js 进程在连接没断开时不会自动退出。在一次性脚本(CLI 工具、定时任务)里必须显式 $disconnect(),否则程序会挂住。

在长驻进程(Web 服务器、Express 应用)里不需要手动断开——Prisma Client 会自动管理连接池。

下一步

现在你已经能在代码里跑通基本的增删改查了。进阶的查询技巧(筛选、排序、分页、嵌套写入、事务)见 04-Prisma Client 查询 分组。