You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prisma upsert()方法报错:Unknown argument问题求助

问题根源

你遇到的这个错误核心原因是:你的prismaUser模型里的email字段没有被标记为唯一约束,所以Prisma生成的prismaUserWhereUniqueInput类型只认可id(因为它是@id自带唯一属性)作为唯一查询条件,不允许用email来定位要更新的记录。

Prisma的upsert方法要求where参数必须传入带有唯一约束的字段,这样它才能准确判断是要更新现有记录还是创建新记录。

解决方案

你需要在schema.prisma里给email字段加上@unique约束,让Prisma和数据库都明确这个字段是全局唯一的:

修改后的schema.prisma代码:

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
  provider = "prisma-client-js"
}
datasource db {
  provider = "postgresql"
  url = env("DATABASE_URL")
}
model prismaUser {
  id Int @id @default(autoincrement())
  name String @db.VarChar(255)
  email String @db.VarChar(255) @unique // 新增@unique约束
  profileViews Int
  role String @db.VarChar(255)
}

修改完schema后,记得重新生成Prisma客户端,执行命令:

npx prisma generate

之后你的Node.js代码不需要做任何修改,就能正常用email作为upsert的where条件了。

补充说明
  • 给字段加上@unique后,数据库层面会自动创建唯一索引,确保不会出现重复的email值;
  • 除了单个字段的@unique,联合唯一约束(比如@@unique([field1, field2]))也可以作为upsert的where条件。

内容的提问来源于stack exchange,提问作者robokonk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:57:34