【问题标题】:How to insert array of objects into MariaDB database如何将对象数组插入 MariaDB 数据库
【发布时间】:2021-08-03 12:01:06
【问题描述】:

我的 MariaDB 中有一个非常简单的表 - 3 列:

  • DT 为 PK
  • 节省
  • kpd

我希望能够在表中一次插入大量对象。这是一段数据的外观:

 [  { 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 的数据,其想法是当新数据中存在具有相同 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。

【问题讨论】:

  • 好吧,您将不得不在输入中编写一个循环,其中包含该查询:)
  • 我也是这么想的,但数组包含 8,000 个元素。这是唯一可能的解决方案吗?

标签: mysql node.js mariadb insert-update


【解决方案1】:

您可以使用Knex.js。特别是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`)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多