SequelizeUniqueConstraintError 创建方法只添加一行

SequelizeUniqueConstraintError create method add only one row

我正在尝试使用 fast-csv 解析一个 csv 文件,最后使用 sequelize

将所有行存储在数据库中

这是我解析数据的脚本:

module.exports = async () => {
  try {
let csvData = [];

    csv
      .parseFile(__basedir + "/test.csv", { headers: true })
      .on('data', (data) => {
        csvData.push(data);
      })
      .on('end', () => {
          Card_Report.bulkCreate(csvData)
      });
} catch (e) {
    console.error('Something went wrong', e)
  }
}

这是我的 table 模型:

  const Test= sequelize.define(
      'test',
      {
        id: {
          type: DataTypes.UUID,
          primaryKey: true,
          defaultValue: uuidv4(),
          allowNull: false
        },
        name: {
          type: DataTypes.STRING,
        },
        age: {
          type: DataTypes.INTEGER,
        }
        }, {
            createdAt: false,
            updatedAt: false,        
            tableName: 'test'
         }
    )
    return Test
  }

这是我的 csv 文件:

name, age  
nina, 24
sarah, 23

当我 运行 脚本时出现此错误 :

Unhandled rejection SequelizeUniqueConstraintError: Validation error

但是当我的 csv 文件中只有一行时,它会将该行正确添加到 table

我该如何解决这个问题?

您似乎获得了相同的 ID,因为 Sequelize 中的所有模型都“准备”了一次,而您的函数 uuidv4() 只运行了一次。因此,对于您插入数据库的每一行,它将具有相同的 uuid。您可以尝试像这样缓解它:

id: {
  type: DataTypes.UUID,
  defaultValue: DataTypes.UUIDV4, <- try something like this
  primaryKey: true,
},

因此,您正在转移为数据库中的每一行生成唯一 UUID 的责任

P.S.: 您可能需要为您的数据库添加一个 uuid 扩展名,如下所示:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";