将数组传递给函数 - PG 和 NodeJS

Ric*_*wis 4 javascript arrays node.js pg

使用pg在我申请的NodeJS我希望能够到一个数组传递给函数,这样我可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

{ error: invalid input syntax for integer: "{"83","82","54","55","79"}"
Run Code Online (Sandbox Code Playgroud)

我该如何在此处构建我的查询?

Sel*_*ish 8

您最好的选择是:

pool.query("SELECT * FROM fixtures WHERE id IN($1:list)", [array]);
// [1,2,3]?"SELECT * FROM fixtures WHERE id IN(1,2,3)"
Run Code Online (Sandbox Code Playgroud)

当变量以 结尾时:list,它被格式化为逗号分隔值列表,每个值根据其 JavaScript 类型格式化。

您需要这样做的原因是默认情况下,数组被格式化为 PostgreSQL 数组,正如您在花括号中看到的那样。


注意:这是在 v7.5.1 中添加到pg(或者更确切地说,pg-promise)。如果您使用的是早期版本,请$1:csv改用。


来源pg-promise#csv-filter