go 语言 beego web 服务 在循环插入数据时 报错: Error 1062: Duplicate entry '32' for key 'PRIMARY',有大佬帮忙吗?


var product_sku models.TProductSku
        for _, i := range strings.Split(getproduct.SpecificationValues, ",") {
            product_sku.ProductId = getproduct.Id
            product_sku.ProductNumber = getproduct.ProductNumber
            product_sku.SpecificationValue = i
            product_sku.Status = 1
            if _, err := o.Insert(&product_sku); err != nil {
                logs.Error(err)
                return
            }
            msg["code"] = 200
            msg["message"] = "Data insertion successful"
            this.Data["json"] = msg
            this.ServeJSON()
            return

据说是主键没自增,但是有的!
然后百度查到说,需要初始化结构体, 不知怎么操作?

继各位大佬回答之后呢, 我贴出我的结构体:


//SKU
type TProductSku struct {
    Id                 int     `json:"id"`
    ProductId          int     `orm:"index" json:"product_id"`
    ProductNumber      string  `orm:"size(255)" json:"product_number"`

    SpecificationValue string  `orm:"null" json:"specification_value"` //规格值

    Status             byte    `orm:"default(1)" json:"status"` //1正常  0 取消
    Base
}

大概也就是我操作循环插入时, 并没有自己操作主键的插入, 所以他是自增的, 唯一的问题是, 例如我有三条数据 [{1,"123","z"},{1,"123","z"},{1,"123","z"},],循环插入第一条可以入库, 如果是空表,那么第一条的主键id 为 1 , 当插入第二条时 就显示报错 主键id 1 重复条目

问题已经解决!

还是考虑初始化的问题, 然后把

var product_sku models.TProductSku

放进for循环里, 每一次循环都去初始化化一次结构体.
不知道这样性能消耗是怎么样, 还有没有更好的办法...
但是目前来说是解决了当下的问题

从报错看,是因为数据写入的时候,发现32这个主键已经存在,主键是不能重复的所以报错,有三种解决方法:
(1)你可以把数据库里面主键未32的数据删除然后再写入
(2)修改要写入数据的主键,然后写入。
(3)写入时忽略主键,让系统自动生成主键。

product_sku.ProductId = getproduct.Id
这是主键么
是多少,数据库里是否已经有了