Gorm Bulk Insert is a library to implement bulk insert/upsert using gorm.
Save bulk records
$ go get github.com/sunary/gorm-bulk-insert
This library depends on gorm, following command is also necessary unless you've installed gorm.
$ go get github.com/jinzhu/gorm
bulk.BulkInsert(db, bulkData) // or bulk.BulkInsertWithTableName(db, tableName, bulkData)
bulk.BulkUpsert(db, bulkData, uniqueKeys) // or bulk.BulkUpsertWithTableName(db, tableName, bulkData, uniqueKeys)
package main import ( "log" "time" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" bulk "github.com/sunary/gorm-bulk-insert" ) type User struct { ID int UserName string `gorm:"column:name"` Age int Hobby string `gorm:"-"` CreatedAt time.Time UpdatedAt time.Time } func (u User) TableName() string { return "user" } func main() { db, err := gorm.Open("mysql", "root:password@tcp(localhost:3306)/db_name") if err != nil { log.Fatal(err) } var bulkData []interface{} for i := 0; i < 10000; i++ { bulkData = append(bulkData, User{ UserName: "sunary", Age: 22, Hobby: "dance", }, ) } err = bulk.BulkInsert(db, bulkData) // or err = bulk.BulkInsertWithTableName(db, User{}.TableName(), bulkData) if err != nil { log.Fatal(err) } var bulkUpsertData []interface{} for i := 0; i < 100; i++ { bulkUpsertData = append(bulkUpsertData, User{ UserName: "sunary", Age: 22, Hobby: "soccer", }, ) } err = bulk.BulkUpsert(db, bulkUpsertData, []string{"name"}) // or err = bulk.BulkUpsertWithTableName(db, User{}.TableName(), bulkUpsertData, []string{"name"}) if err != nil { log.Fatal(err) } }
This project is under Apache 2.0 License