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

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

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

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

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案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 对象。
          猜你喜欢
          • 2018-05-22
          • 1970-01-01
          • 1970-01-01
          • 2018-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-15
          • 2015-06-10
          相关资源
          最近更新 更多