javascript mysql вставить несколько значений

#javascript #mysql #node.js

#javascript #mysql #node.js

Вопрос:

Я пытаюсь вставить запрос.тело, которое я получаю, представляет собой следующую структуру в базе данных

 request.body = [{
        "createdAt": "2019-03-11T08:03:11.438",
        "deviceType": "type1",
        "deviceSerial": "123",
        "metricName": "metric1",
        "metricValue": "29"
    },
    {
        "createdAt": "2019-03-11T08:03:11.442",
        "deviceType": "type2",
        "deviceSerial": "234",
        "metricName": "metric2",
        "metricValue": "29"
    },
    {
        "createdAt": "2019-03-11T08:03:11.442",
        "deviceType": "type3",
        "deviceSerial": "345",
        "metricName": "metric3",
        "metricValue": "165"
    }
]
  

Пытаюсь задать запрос.тело в базу данных:

 var mysql = require('node-mysql');
var conn = mysql.createConnection({
    ...
});

var sql = "INSERT INTO Test (created_at, device_type, devices_serial, metric_name, metric_value) VALUES ?";

var values = request.body // <- Here it the problem, I guess

conn.query(sql, [values], function(err) {
    if (err) throw err;
    conn.end();
});
  

Я пытаюсь понять, как сконструировать var values , чтобы он соответствовал следующему формату:

 var values = [
    ['2019-03-11T08:03:11.438', 'type1', '123', 'metric1', '29'],
    ['2019-03-11T08:03:11.438', 'type2', '234', 'metric2', '29'],
    ['2019-03-11T08:03:11.438', 'type3', '345', 'metric3', '165'],
];
  

Комментарии:

1. В чем проблема? Вы получаете какую-либо ошибку? request Определено ли на этом этапе?

2. Это решение работает, но, вероятно, не самое лучшее. сгенерируйте sql, подобный этому ‘Вставить в…… значения (?,?,?…?), (?,?,?…?)…’ . Каждый () содержит запись в базе данных. А затем последовательно распределяет параметры.

Ответ №1:

Вы можете получить значения объекта в виде массива

 var values = request.body.map(r=>  Object.values(r));
  

Ответ №2:

РЕДАКТИРОВАТЬ: Попробуйте это

     var mysql = require('node-mysql');
    var conn = mysql.createConnection({
        ...
    });

    var sql = "INSERT INTO Test (created_at, device_type, devices_serial, metric_name, metric_value) VALUES ?";

    var values = request.body.map(Object.values);

    conn.query(sql, [values], function (err) {
        if (err) throw err;
        conn.end();
    });
  

Ответ №3:

Что-то вроде этого должно сработать:

 var conn = mysql.createConnection({
    ..
});

let request = {};
request.body = [{
    "createdAt": "2019-03-11T08:03:11.438",
    "deviceType": "type1",
    "deviceSerial": "123",
    "metricName": "metric1",
    "metricValue": "29"
  },
  {
    "createdAt": "2019-03-11T08:03:11.442",
    "deviceType": "type2",
    "deviceSerial": "234",
    "metricName": "metric2",
    "metricValue": "29"
  },
  {
    "createdAt": "2019-03-11T08:03:11.442",
    "deviceType": "type3",
    "deviceSerial": "345",
    "metricName": "metric3",
    "metricValue": "165"
  }
];

// Convert to array of arrays. 
const values = request.body.map((obj) => Object.values(obj));

const sql = "INSERT INTO Test (created_at, device_type, devices_serial, metric_name, metric_value) VALUES ?";

conn.query(sql, [values], function(err) {
    if (err) throw err;
    conn.end();
});