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)