在我的 NodeJS 应用程序中使用 pg
我希望能够将数组传递给函数,以便我可以使用 IN
语句作为查询的一部分
例子
async function myMethod(array) {
// array looks like [ '83', '82', '54', '55', '79' ] for example
let response;
try {
response = await pool.query("SELECT * FROM fixtures WHERE id IN($1)", [array]);
} catch (e) {
console.log(e);
}
return response.rows;
}
我得到一个错误
{ error: invalid input syntax for integer: "{"83","82","54","55","79"}"
请问我如何在这里构建我的查询?
最佳答案
你最好的选择是:
pool.query("SELECT * FROM fixtures WHERE id IN($1:list)", [array]);
// [1,2,3]→"SELECT * FROM fixtures WHERE id IN(1,2,3)"
当变量以 :list
结尾时,它被格式化为逗号分隔值列表,每个值根据其 JavaScript 类型格式化。
您需要它的原因是默认情况下数组被格式化为 PostgreSQL 数组,如您在大括号中看到的那样表示。
注意:这已添加到 v7.5.1 中的 pg
(或者更确切地说,pg-promise
)。如果您使用的是早期版本,请改用 $1:csv
。
关于javascript - 将数组传递给函数 - PG 和 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53818018/