beego之orm多条数据插入

有些数据库,比如MySQL支持一次性插入多条数据的语法,当然也有些数据库不支持。这里演示了两种方法,一种适用于支持多条数据插入语法的数据库,另外一个适用于不支持多条数据插入语法的数据库,两者都能实现一次性插入多条数据的功能。

这里用到的两个方法:InsertMultiPrepareInsert的原型如下:

func (o *querySet) PrepareInsert() (Inserter, error)
func (o *orm) InsertMulti(bulk int, mds interface{}) (int64, error)

不多说,上代码:

package main

import (
	"fmt"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

const (
	DRIVER_NAME   = "mysql"
	DATA_SOURCE   = "root:root@tcp(localhost:3306)/beegodb?charset=utf8&loc=Asia%2FShanghai"
	MAX_IDLE_CONN = 5
	MAX_OPEN_CONN = 30
)

type User struct {
	Id       int
	Name     string `orm:"size(20)"`
	Email    string `orm:"size(50)"`
	Age      int
	IsActive bool
}

func registerDB() {
	orm.Debug = true
	orm.RegisterDataBase("default", DRIVER_NAME, DATA_SOURCE, MAX_IDLE_CONN, MAX_OPEN_CONN)
	orm.RegisterModel(new(User))
	orm.RunCommand()
}

func multiInsertUsers() {
	users := []User{
		User{Name: "jemy", Email: "jemy@golanghome.com", Age: 25},
		User{Name: "john", Email: "john@golanghome.com", Age: 24},
		User{Name: "amy", Email: "amy@golanghome.com", Age: 22},
		User{Name: "steven", Email: "steven@golanghome.com", Age: 26},
		User{Name: "dolphin", Email: "dolphin@golanghome.com", Age: 21},
		User{Name: "alex", Email: "alex@golanghome.com", Age: 32},
		User{Name: "bob", Email: "bob@golanghome.com", Age: 25},
		User{Name: "thomas", Email: "thomas@golanghome.com", Age: 25},
		User{Name: "chris", Email: "chris@golanghome.com", Age: 38},
		User{Name: "peter", Email: "peter@golanghome.com", Age: 40},
	}
	createUsers1(users)
	fmt.Println("----------------------------------------------")
	createUsers2(users)
}

func createUsers1(users []User) {
	if num, err := orm.NewOrm().InsertMulti(len(users), users); err != nil {
		fmt.Println(err)
	} else {
		fmt.Printf("Insert %d users' data!\r\n", num)
	}
}

func createUsers2(users []User) {
	inserter, _ := orm.NewOrm().QueryTable("user").PrepareInsert()
	for _, user := range users {
		inserter.Insert(&user)
	}
}

func main() {
	registerDB()
	multiInsertUsers()
}

在第一个函数 createUsers1里面,我们使用beego的orm提供的 InsertMulti方法来一次性插入多条数据。在第二个函数 createUsers2里面,我们使用orm的 PrepareInsert方法先创建一个 inserter插入器,这个 inserter可以用来多次插入数据。对于整个函数来讲,就是一次性插入多条数据了。

createUsers2使用了PrepareInsert,记得结束的时候要关闭掉。如下:

func createUsers2(users []User) {
    inserter, _ := orm.NewOrm().QueryTable("user").PrepareInsert()
    for _, user := range users {
        inserter.Insert(&user)
    }
    inserter.Close()
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值