第一次查询:从 findMany 到 create 的完整示例
准备数据库
Schema 和 Client 都就绪了,但数据库里还没有真实的表结构。先把 Schema 同步到数据库:
npx prisma migrate dev --name init
这条命令会:
- 读取
schema.prisma - 生成一条
create_*迁移文件,里面包含建表 SQL - 应用迁移到数据库
- 自动触发
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
输出里你会看到:
create返回完整的创建对象findMany返回数组include: { posts: true }会把关联的 Post 对象一起序列化返回- 所有返回值都是普通 JavaScript 对象,可以直接传给
console.log或序列化成 JSON 发送给前端
程序结尾别忘断开连接
注意脚本末尾的 .finally(() => prisma.$disconnect())。Prisma Client 默认会维持数据库连接池,Node.js 进程在连接没断开时不会自动退出。在一次性脚本(CLI 工具、定时任务)里必须显式 $disconnect(),否则程序会挂住。
在长驻进程(Web 服务器、Express 应用)里不需要手动断开——Prisma Client 会自动管理连接池。
下一步
现在你已经能在代码里跑通基本的增删改查了。进阶的查询技巧(筛选、排序、分页、嵌套写入、事务)见 04-Prisma Client 查询 分组。