gpt4 book ai didi

prisma - 使用 prisma 原始查询插入具有多个字段的多行

转载 作者:行者123 更新时间:2023-12-03 08:01:24 30 4
gpt4 key购买 nike

我找不到任何示例来说明如何使用整数执行此操作,并且我的选项不起作用(

我的表包含 2 列整数,我需要使用 prisma 原始查询向其中添加多行。

如果我只添加 1 行并使用 Prisma.join() 的数字数组 - 它工作正常:

const testArr = [1,3]
return await this.prisma.$executeRaw`
INSERT INTO public."_CategoryToItem" ("B", "A")
VALUES (${Prisma.join(testArr)})
ON CONFLICT DO NOTHING
;`

但是当使用模板字符串一次添加多行时,我收到语法错误:

// Exception:
INSERT INTO public."_CategoryToItem" ("B", "A")
VALUES $1
ON CONFLICT DO NOTHING
; ["(1,2),(2,2)"]
Duration: 0ms
[Nest] 1226 - 10/08/2022, 11:41:45 AM ERROR [ExceptionsHandler]
Invalid `prisma.$executeRaw()` invocation:

Raw query failed. Code: `42601`. Message: `db error: ERROR: syntax error at or near "$1"`

我正在尝试这个:

const testArr = ['(1,2)', '(2,2)']
return await this.prisma.$executeRaw`
INSERT INTO public."_CategoryToItem" ("B", "A")
VALUES (${Prisma.join(testArr)})
ON CONFLICT DO NOTHING
;`

还有这个:

const testArr = ['(1,2)', '(2,2)']
await this.prisma.$executeRaw`
INSERT INTO public."_CategoryToItem" ("B", "A")
VALUES ${testArr.join(',')}
ON CONFLICT DO NOTHING
;`

看起来 prisma 正在插入的值周围添加字符串括号(但我不确定,因为日志描述性不是很强,但看起来是问题所在)。

请告知解决方法。

注意:我使用原始查询是因为在其他相关查询中使用不受支持的类型,因此我需要有关原始查询的帮助。

最佳答案

如果您想避免不安全的原始查询,则不能将 '(1,2)' 等 SQL 表达式的一部分作为输入。这可以防止 prisma 避免 SQL 注入(inject)。

因此,您必须采用如下形式的数据:

const testArr = [
[1, 2],
[2, 2],
];

假设一个示例架构:

model Foo {
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
a Int
b Int
}

然后您可以像这样执行原始查询:

await prisma.$executeRaw`
INSERT INTO "Foo" ("b", "a")
VALUES ${Prisma.join(
testArr.map((row) => Prisma.sql`(${Prisma.join(row)})`)
)}
ON CONFLICT DO NOTHING;`;

如您所见,您必须使用 Prisma.joinPrisma.sql 来构建查询。您不能使用原始字符串。

关于prisma - 使用 prisma 原始查询插入具有多个字段的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74020035/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com