如何将对象数组插入 MariaDB 数据库

How to insert array of objects into MariaDB database

我的 MariaDB 中有非常简单的 table - 3 列:

我希望能够在 table 中一次插入大量对象。这是一段数据的样子:

 [  { date: '2021-03-01T05:55:00.000Z', kpdValue: 0, savings: 0 },
    { date: '2021-03-01T06:00:00.000Z', kpdValue: 0, savings: 0 },
    { date: '2021-03-01T06:05:00.000Z', kpdValue: 0, savings: 0 },
    { date: '2021-03-01T06:10:00.000Z', kpdValue: 0, savings: 0 },
    { date: '2021-03-01T06:15:00.000Z', kpdValue: 0, savings: 0 },
......
]

我可以多次接收具有相同 PK 的数据,我的想法是当 table 中具有相同 PK 的新数据中有 PK - 替换它。

在示例屏幕截图中,我的 PK DT 值为 2021-02-11 15:45:00。我设法创建查询,检查它是否存在,如果存在则替换它,如果不存在则创建它:

INSERT INTO savingswest (DT,Saving,kpd)
 VALUES ('2021-02-11 15:45:00','4.4','1.4') 
 ON DUPLICATE KEY UPDATE Saving='20.5',dt='2021-02-11 15:45:00',kpd='1.9';

如何使用我收到的数组执行此过程?

我正在使用 Node.js.

您可以使用Knex.js. Specifically the merge方法。

这是一个例子:

knex('tableName')
  .insert([  
    { dt: '2021-03-01T05:55:00.000Z', kpd: 0, savings: 0 },
    { dt: '2021-03-01T06:00:00.000Z', kpd: 0, savings: 0 },
    { dt: '2021-03-01T06:05:00.000Z', kpd: 0, savings: 0 },
    { dt: '2021-03-01T06:10:00.000Z', kpd: 0, savings: 0 },
    { dt: '2021-03-01T06:15:00.000Z', kpd: 0, savings: 0 },
   ])
  .onConflict('dt')
  .merge()

单个记录的输出:

insert into `tableName` (`dt`,`kpd`, `savings`) values ('2021-03-01T05:55:00.000Z', 0, 0) on duplicate key update `kpd` = values(`kpd`), `savings` = values(`savings`)