如何将数组作为参数传递给pg-promise中的rowMode =“ array”

问题描述 投票:0回答:1

我想使用rowMode =“ array”来获得查询的结果(因为这可能是一个非常大的表,并且我不希望将其格式化为对象格式),但是我不知道如何传递用于IN运算符的数组/列表参数。

const events = await t.manyOrNone({text: `select * from svc.events where user_id in ($1:list);`, rowMode: "array"}, [[1,2]]);

但是,以上给出了错误:“:”或附近的语法错误

删除:list也不起作用:

const events = await t.manyOrNone({text: `select * from svc.events where user_id in ($1);`, rowMode: "array"}, [[1,2]]);

错误:整数:“ {” 1“,” 2“}”的无效输入语法]

[我了解这可能是因为我被迫对ParameterMode的rowMode =“ array”使用ParameterizedQuery格式,该格式不允许使用:list这样的令人眼花modifier乱的修饰符,但这会引发问题,如果我要使用ParameterizedQuery格式,那么我如何在本地传递Javascript数组,以便驱动程序可以接受它?

我想这个问题的替代表达是:如何使用数组作为ParameterizedQuery或PreparedStatements的参数...

pg-promise
1个回答
0
投票

回答我自己的问题,因为我最终找到了这个问题的答案:如何在使用rowMode="array" | ParameterizedQuery | PreparedStatements时将数组作为参数传递给IN运算符。

因为此查询在服务器中被参数化,所以我们不能使用IN运算符,因为IN运算符使用IN ($1, $2, $3...)参数化项目。相反,我们需要使用ANY运算符,其中ANY($1)期望$ 1的数组。

所以将起作用的查询是:

const events = await t.manyOrNone({text: `select * from svc.events where user_id=ANY($1);`, rowMode: "array"}, [[1,2]]);
© www.soinside.com 2019 - 2024. All rights reserved.