Prisma 模型语法
模型语法就是通过模型能够直接调用的方法
findUnique()
查询允许你检索单个数据库记录
- 代码
ts
const user = await prisma.user.findUnique({
where: {
id: 17,
},
});
console.log(user);
- 返回值
注意
查询不到就返回 null
查询的到就返回结果
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);
}
}
- 返回值
注意
查询不到就抛出异常
查询的到就返回结果
findFirst()
findFirst 返回列表中符合你的条件的第一条记录
- 代码
ts
const user = await prisma.user.findFirst({
where: {
id: {
gte: 1,
},
},
});
console.log(user);
- 返回结果
注意
查询不到就返回 null
查询的到就返回结果
findFirstOrThrow()
findFirstOrThrow 返回列表中符合你的条件的第一条记录
如果找不到记录,则抛出错误
- 代码
ts
const user = await prisma.user.findFirst({
where: {
id: {
gte: 1,
},
},
});
console.log(user);
- 返回结果
注意
查询不到就抛出异常
查询的到就返回结果
findMany()
findMany 返回一个包含所有符合你条件的记录的列表
- 代码
ts
const user = await prisma.user.findMany({
where: {
id: {
gt: 1,
},
},
});
console.log(user);
- 返回结果
注意
查询不到就返回空数组
查询的到就返回结果
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,
},
];