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";
我正在尝试使用 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";