Sequelize:批量插入

Posted

技术标签:

【中文标题】Sequelize:批量插入【英文标题】:Sequelize: insert in bulk 【发布时间】:2015-03-31 06:35:47 【问题描述】:

我正在使用 Node.js、mysql 和 Sequelize。我想一次将大约 10k 行插入一个表中。该表具有自定义 primaryKey 字段,该字段是手动设置的。数据是从网上下载的,并且是重叠的。

我想要一个bulkCreate 的版本,如果数据中的任何行具有表中已经存在的唯一键,它就不会失败。这种事情是在 MySQL 中通过INSERT ... ON DUPLICATE KEY UPDATE 构造完成的。

我如何在 Sequelize 中做到这一点?

【问题讨论】:

【参考方案1】:

ProductAttribute.bulkCreate(arrayToUpsert, updateOnDuplicate: ['id', 'attributeValue'] ) - 这将使用 arrayToUpsert 中指示的 id 更新每个 attributeValue

【讨论】:

【参考方案2】:

以下是批量更新的正确语法,在“sequelize”上测试:“6.0.0”

model.bulkCreate(dataToUpdate,  updateOnDuplicate: ["user_id", "token", "created_at"] )

它将通过 dataToUpdate 中的第一列值更新 updateOnDuplicate 中指定的所有列

【讨论】:

【参考方案3】:

Yuri 的回答将忽略重复项...updateOnDuplicate 有一个选项:

如果行键已经存在(重复键更新时)要更新的字段? (仅 mysql 和 mariadb 支持)。默认情况下,所有字段都会更新。

http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance

【讨论】:

【参考方案4】:

将选项对象传递给 bulkCreate 并将 ignoreDuplicates 设置为 true

bulkCreate([...],  ignoreDuplicates: true )

【讨论】:

不幸的是,这只是 mysql,不适用于 postgres bulkCreate 总是插入一条记录,我没有得到解决方案。并在第二次插入尝试时给出唯一错误 Soo.. 我正在使用v5,我只花了一个小时左右调试为什么我的 bulkCreate 不起作用。您传递给 bulkCreate 的数据需要是纯 js 对象的数组。而不是 sequelize 模型的数组。我有一个服务器响应..我正在进行修改并使用 bulkCreate 执行 bulkUpdate....您需要在您的数据上运行 row.get(plain:true) 以将其恢复为普通的 js 对象。

以上是关于Sequelize:批量插入的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Sequelize 和 node.js 进行批量插入

Javascript(NodeJs) - 将数组和对象转换为 mysql 中的批量插入(Sequelize)

在mysql Sequelize + Nodejs中将数组和对象转换为批量插入

Sequelize - 从数组批量创建

sequelize 批量添加数据

为啥批量插入/更新更快?批量更新如何工作?