【问题标题】:How to do insert with array in SQL with JavaScript Node?如何使用 JavaScript 节点在 SQL 中插入数组?
【发布时间】:2019-05-16 05:55:15
【问题描述】:

我有问题。我有一个数组,我希望每个元素都是列中的一行;

例子:

我的数组:const myArray = ['A', 'B', 'C', 'D'];

结果是:

Column1 | 
-----------------------------------------
    A   |  
    B   |  
    C   |  
    D   |  

我正在使用 Node.js 和库 node-postgres

var queryString = "INSERT INTO test (id) VALUES (" + "'" + [myArray] + "'" + ") RETURNING *";

pool.connect((err, client, done) => {
  if (err) {
    done();
    console.log(err)
    return res.status(500).json({
      success: false,
      data: err
    })
  }
  client.query(queryString, (err, result) => {
    done();
  });
})

但它就像一个更大的字符串;

有人可以帮助我吗?

【问题讨论】:

    标签: javascript sql node.js postgresql node-postgres


    【解决方案1】:

    我想这就是你要找的东西:

    var queryString = `INSERT INTO test (id) VALUES ("${myArray.join('"),("')}") RETURNING *`
    

    INSERT INTO test (id) VALUES (("A"),("B"),("C"),("D")) RETURNING *

    更好的解决方案是使用查询参数:

    var queryString = `INSERT INTO test (id) VALUES (${myArray.map((v,i) => `$${i+1}`).join('),(')}) RETURNING *`
    

    插入测试 (id) 值 (($1),($2),($3),($4)) 返回 *

    然后像这样使用它:

    client.query(queryString, myArray, (err, result) => {
      done();
    });
    

    【讨论】:

    • 你好,还是一样的:(
    • @muistooshort 是的,你是对的 - 查询参数将是一个更好的解决方案 - 我更新了我的答案
    • 或者${myArray.map((v,i) => `($${i+1})`).join(',')} 如果('),(') 看起来像是在盯着你看;)
    • 我已将其更正为正确的 SQL 应包含的内容。对于整个集合,插入对都应由() 额外包裹。
    【解决方案2】:

    好吧!我相信这应该在某个地方问过。但无论如何......你应该有一个如下所示的代码。 - 只需将多个插入值添加为嵌套数组。 :

        var queryString = "INSERT INTO test (id) VALUES ($1) RETURNING *";
        var values = [['A'],['B'],['C'],['D']]
    

    当你来到客户端查询时

       client.query(queryString, values, (err, result) => ...
    

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 2018-12-29
      • 2021-07-02
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多