Как сделать вставку с массивом в SQL с JavaScript Node? - PullRequest
0 голосов
/ 15 декабря 2018

У меня проблема.У меня есть массив, и я хочу, чтобы каждый элемент был строкой из столбца;

Пример:

Мой массив: 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();
  });
})

Но это похоже на большую строку;

Кто-то может мне помочь?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Хорошо!Я уверен, что это нужно было где-то спросить.но что угодно .. у вас должен быть код, похожий на следующий.- просто добавьте несколько вставленных значений в виде вложенного массива.:

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

и когда вы приходите к клиенту, запрос

   client.query(queryString, values, (err, result) => ...
0 голосов
/ 15 декабря 2018

Я думаю, это то, что вы ищете:

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 *`

т.е.

INSERT INTO test (id) ЗНАЧЕНИЯ (($ 1), ($ 2), ($ 3), ($ 4)) ВОЗВРАЩЕНИЕ *

А затем использовать его как:

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