使用gorp如何有效地插入多条记录?也就是说,有没有批量插入,而不是一次插入一个?
var User struct {
Name string
Email string
Phone string
}
var users []Users
users = buildUsers()
dbMap.Insert(users...) //this fails compilation
//I am forced to loop over users and insert one user at a time. Error Handling omitted for brevitygorp有没有更好的机制?驱动程序为MySQL。
发布于 2016-09-08 01:43:21
正如我在其他参考资料中发现的那样,这种方法不起作用的原因是interface{}和User{}在内存中的布局不同,因此它们的分片不是兼容类型。建议的解决方案是在for循环中将[]User{}转换为[]interface{},如下所示:https://golang.org/doc/faq#convert_slice_of_interface
还有一点需要注意的是:你需要为DbMap.Insert()函数使用指针。
下面是我解决这个问题的方法:
s := make([]interface{}, len(users))
for i, v := range users {
s[i] = &v
}
err := dbMap.Insert(s...)注意,&v很重要,否则Insert会抱怨非指针。
发布于 2016-05-03 07:58:39
它看起来并没有为原始SQL或多值插入(总是依赖于SQL方言)提供包装器。
您担心的是速度还是事务?如果没有,我将只在for循环中执行插入。
https://stackoverflow.com/questions/36990644
复制相似问题