我有乙個朋友, 最近用gorm發現官方不支援批量插入, 看官方issue 2023年就有人提過這個問題了, 不過現在還不支援
但是問題不大, 官方留出來乙個執行原生sql(db.exec)的方法來解決這個問題, 而且官方現在在開發v2版本, 在v2版本中就會支援這個功能了
但是生活還得繼續, bug還是得繼續寫, 本來想在網上找乙個公用方法來維持一下生活, 結果竟然沒找見!
都是指定單個結構體去插入的
這當然不行了, 寫**的意義不就是為了減輕重複的工作嘛, 既然這樣, 就只能自己動手豐衣足食了
下面為生成語句的方法
// getbranchinsertsql 獲取批量新增資料sql語句
func getbranchinsertsql(objs inte***ce{}, tablename string) string
fieldname := ""
var valuetypelist string
fieldnum := reflect.typeof(objs[0]).numfield()
fieldt := reflect.typeof(objs[0])
for a := 0; a < fieldnum; a++ else
// 獲取字段型別
if fieldt.field(a).type.name() == "string" else if strings.index(fieldt.field(a).type.name(), "uint") != -1 else if strings.index(fieldt.field(a).type.name(), "int") != -1
} var valuelist string
for _, obj := range objs else
} v += ")"
} insertsql := fmt.sprintf("insert into `%s` (%s) values %s", tablename, fieldname, strings.join(valuelist, ",")+";")
return insertsql
}// getformatfield 獲取字段型別值轉為字串
func getformatfield(objv reflect.value, index int, t string, sep string) string else if t == "uint" else if t == "int"
return v
}// getcolumnname 獲取欄位名
func getcolumnname(jsonname string) string
return strings.replace(name, "column:", "", 1)
} return ""
}// batchcreatemodelsbypage 分頁批量插入
func batchcreatemodelsbypage(tx *gorm.db, datalist inte***ce{}, tablename string) (err error)
// 如果超過一百條, 則分批插入
size := 100
page := len(datalist) / size
if len(datalist)%size != 0
for a := 1; a <= page; a++ , 0)
if a == page else
sql := getbranchinsertsql(bills, tablename)
if err = tx.exec(sql).error; err != nil
} return
}
最後會返回批量插入的sql語句, 這樣一來就舒服多了
因為我的朋友 現在型別主要用到了string, int和uint, 如果有其他型別需要加的話在 獲取字段型別和getformatfeild裡面加就行了
如果各位大佬有更好的解決方案希望可以拿出來分享學習一下
關於資料批量入庫解決方案
關於程式批量入庫解決方案 下面小弟關於最近的乙個批量入庫解決辦法與大家分享一下,由於是第一次部落格,有什麼不對,請大家多多指教 最近專案用到了大併發寫資料庫操作,當用只做了單條資料commit一次,這樣做插入會很慢,資料庫的壓力也很大,當時自己的第乙個想法就是改變提交方式,10條或100條提交一次,...
批量錄入快遞位址解決方案
電商 erp等軟體系統下單環節,批量錄入收件人資訊及位址,通常會碰到諸如位址不完整 位址不規範 收件人資訊與位址寫一起需要區分開 逐個錄入效率過低等問題。下面介紹幾個批量錄入收件人資訊及位址的解決方案。收件人資訊有誤場景 1.收件人資訊填寫不完整,如 四川成華區和美西路19號,李一,13512341...
關於資料批量入庫解決方案
關於程式批量入庫解決方案 下面小弟關於最近的乙個批量入庫解決辦法與大家分享一下,由於是第一次部落格,有什麼不對,請大家多多指教 最近專案用到了大併發寫資料庫操作,當用只做了單條資料 commit 一次,這樣做插入會很慢,資料庫的壓力也很大 當時自己的第乙個想法就是改變提交方式,10 條或 100 條...