我从 API 中提取数据。拉取结果生成结构数组,每个数组包含 100 个元素。我用来将它们插入数据库的代码是:
func (ACUpdater) InsertToTable(rawData *models.Contacts, table *gorm.DB) {
for i := 0; i < len(rawData.Results); i++ {
temp := models.ACQ_report{
ID : "", //to be created later by hashing below data fields
RecordID: rawData.Results[i].ID,
FirstName: rawData.Results[i].Properties.Firstname,
LastName: rawData.Results[i].Properties.Lastname,
Email: rawData.Results[i].Properties.Email,
PhoneNumber: rawData.Results[i].Properties.Phone,
ContactOwner: rawData.Results[i].Properties.HubspotOwnerID,
CompanyName: rawData.Results[i].Properties.Company,
}
temp.ID = hashContactRecord(&temp)
table.Create(&temp)
fmt.Println(&temp)
fmt.Println(i)
}
}
我使用数据字段的散列作为表的主键,因此如果这些数据字段中的任何一个发生变化,散列也会发生变化。这样,我就可以将已更改的记录附加到现有表中,而不必担心重复的主键。
INSERTING问题是,在 GORM 出现 1 个重复主键错误后,上述功能完全“放弃” 。如果要插入数据库的第一条记录是重复的,那么tx.Created(&temp)仍然会运行,但不会插入更改的记录。好像tx.Create()在第一个重复的主键错误之后放弃了。
如何修复此行为?
鸿蒙传说
相关分类