SequelizeUniqueConstraintError创建方法只添加一行



我试图用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)
}
}

这是我的桌子型号:

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文件中只有一行时,它会正确地将该行添加到表中

我该怎么解决这个问题?

您似乎得到了相同的id,因为Sequelize中的所有模型都是"准备好的";一次,而函数uuidv4()只运行一次。因此,对于插入数据库的每一行,它都将具有相同的uuid。你可以试着这样减轻它:

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

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

附言:你可能需要一个数据库的uuid扩展,比如这样的:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

相关内容

  • 没有找到相关文章

最新更新