我试图用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";