[英]MySQL SET inserts only the first item in a list
我正在使用NodeJs msyql,
var telemetryItemList = [
{ 'created_at': createdAt, 'device_type': deviceType + '1', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '2', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '3', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '4', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '5', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue }
];
pool.getConnection((err, conn) => {
if(err) {
throw new Error('Could not get DB connection');
}
conn.query(`INSERT INTO ${Config.tableName} SET ?`, telemetryItemList, (err, res) => {
.
.
.
上面的代码仅插入列表的第一行,为什么呢?
UPDATE
遵循我在这里收到的良好答案之后,我相信最好将整个对象刷新到数据库中,而不要在每一行上创建查询
就像是:
var telemetryItemList2 = [
['created_at': createdAt, 'device_type': deviceType + '1', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue],
['created_at': createdAt, 'device_type': deviceType + '2', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue],
['created_at': createdAt, 'device_type': deviceType + '3', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue],
['created_at': createdAt, 'device_type': deviceType + '4', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue],
['created_at': createdAt, 'device_type': deviceType + '5', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue],
];
但是如何构造模型?
var telemetryItemList = [
{ 'created_at': createdAt, 'device_type': deviceType + '1', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '2', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '3', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '4', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '5', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue }
];
pool.getConnection((err, conn) => {
if(err) {
throw new Error('Could not get DB connection');
}
conn.query(`INSERT INTO ${Config.tableName} SET ?`, [telemetryItemList], (err, res) => {
.
.
.
var telemetryItemList = [
{ 'created_at': createdAt, 'device_type': deviceType + '1', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '2', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '3', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '4', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue },
{ 'created_at': createdAt, 'device_type': deviceType + '5', 'device_serial': deviceSerial , 'metric_name': metricName, 'metric_value': metricValue }
];
尝试遍历telemetryItemList
:
pool.getConnection((err, conn) => {
if(err) {
throw new Error('Could not get DB connection');
}
telemetryItemList.forEach(row => {
conn.query(`INSERT INTO ${Config.tableName} SET ?`, row, (err, res) => {
//
});
});
});
您需要使用INSERT ... VALUES
,( INSERT ... SET
不支持批量),还需要将telemetryItemList
设置为array:
pool.getConnection((err, conn) => {
if(err) {
throw new Error('Could not get DB connection');
}
conn.query(`INSERT INTO ${Config.tableName} (created_at, device_type, device_serial, metric_name, metric_value) VALUES ?`, [telemetryItemList.map(tel_arr => [tel_arr.created_at, tel_arr.device_type, tel_arr.device_serial, tel_arr.metric_name, tel_arr.metric_value])], (err, res) => {
.
.
.
参考:
批量插入对象数组
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.