mariadb 将bulkCreate与updateOnDuplicate一起使用时,始终会向数据库中插入新行

v7pvogib  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(138)

我继承的一个项目是使用sequelize 6.12.5作为Express + MariaDB后端的一部分。当用户在前端更新任何数据时,数据库中的行将被复制,但新值与更新的现有行相反。
实际上,这是系统中存在此问题的特定部分的代码:

//Create Bulk Entries
    const reportEntries =  await ReportEntry.bulkCreate(entries, {
      ignoreDuplicates: true,
      updateOnDuplicate: ['input_section_id', 'input_item_id', 'quantity', 'input_const', 'total']
    })
    return res.status(201).json({ entries: reportEntries });

而ReportEntry模型的定义如下:

ReportEntry.init({
    facility_id: DataTypes.INTEGER,
    business_id: DataTypes.INTEGER,
    input_section_id: DataTypes.INTEGER,
    input_item_id: DataTypes.INTEGER,
    input_const: DataTypes.DECIMAL(10,3),
    quantity: DataTypes.DECIMAL(10,3),
    total: DataTypes.DECIMAL(10,3),
    is_offset: DataTypes.BOOLEAN,
    year: DataTypes.INTEGER,
    quarter: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'ReportEntry',
    tableName: 'ch_report_entries',
    underscored: true,
    createdAt: 'created_at',
    updatedAt: 'updated_at'
  });

我已经通过了这里的续集文档,据我所知,一切看起来都很好,但它显然是不工作。
这段代码中是否缺少一些根本性的东西,或者我是否应该在故障诊断中寻找其他地方?

k10s72fa

k10s72fa1#

我可能是错的,但是忽略重复意味着sequelize不会抛出一个错误(如果不使用这个选项-或者“update on duplicate”选项-它会抛出一个错误)。在你的情况下,我会说你不应该使用这个选项。如果你的条目数组中有主键引用,它也不清楚如何创建新行...

相关问题