【问题标题】:Prisma $queryRaw with variable length parameter list具有可变长度参数列表的 Prisma $queryRaw
【发布时间】:2021-09-25 19:15:50
【问题描述】:

我将 Prisma 与 Postgres 一起使用。由于在基础表中使用了不受支持的 tsvector 类型,我需要将 $queryRaw 用于特定查询。在此查询中,我还需要使用“in”语句,其中“in”列表中的项目需要参数化。我已经尝试过这个

const ids = [41, 55]
const result = await prisma.$queryRaw`select * from users where id in (${ids})`;

但我得到内核恐慌

PANIC in /root/.cargo/git/checkouts/rust-postgres-dc0fca9be721a90f/8a61d46/postgres-types/src/lib.rs:762:18
expected array type

我也试过这个...

const result = await prisma.$queryRaw`select * from users where id in (${ids.join(',')})`;

但是我得到了这个错误......

Raw query failed. Code: `22P03`. Message: `db error: ERROR: incorrect binary data format in bind parameter 1`

我认为 prisma 使用的 sql-template-tag 库有一种支持它的方式,所以在安装和导入它之后,我尝试了这个..

const result = await prisma.$queryRaw`select * from users where id in (${join(ids)})`;

但这会引发同样的错误。

任何想法我可以如何实现这一目标?

【问题讨论】:

    标签: postgresql prisma


    【解决方案1】:

    RTFM:https://www.prisma.io/docs/concepts/components/prisma-client/raw-database-access#tagged-template-helpers

    import { Prisma } from "@prisma/client";
    
    const ids = [1, 3, 5, 10, 20];
    const result = await prisma.$queryRaw`SELECT * FROM User WHERE id IN (${Prisma.join(
      ids
    )})`;
    

    【讨论】:

    • 我标记了这个,直到我意识到你在回答你自己的问题。但是感谢您找到它,因为 Prisma 的文档可能很密集,不利于找到您要查找的内容。
    猜你喜欢
    • 2011-11-27
    • 2022-09-23
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多