node.js - 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 的责任
PS:您的数据库可能需要一个 uuid 扩展,如下所示:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
推荐阅读
- postgresql - 如何创建可以从 DBeaver 调用的 PostgreSQL 函数?
- elasticsearch - 弹性搜索在多值字段上返回无结果过滤
- java - 无法在英特尔设备上实例化活动异常
- java - Android Studio 3.5,索引时间
- wpf - 在 Xunit 测试中创建 System.Windows.Media.Pen 时出现间歇性错误
- react-native - 在有天赋的聊天中删除和复制消息
- ruby - 如何使用 Nokogiri 和 XPath 将元素添加到 XML
- ios - Swift - 使用计时器检测用户不活动,然后在 4 分钟后显示警报以提示用户是否仍然存在
- java - 将 ByteBuffer 转换为 Image 会产生嘈杂的输出
- android - 隐藏的蓝牙/BLE 设备