1

使用 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 brevity

gorp有更好的机制吗?驱动程序是 MySQL。

4

2 回答 2

3

正如我在其他一些资源上发现的那样,这不起作用的原因是内存interface{}User{}没有相同的布局,因此它们的切片不是兼容的类型。建议的解决方案是转换[]User{}[]interface{}in for 循环,如下所示: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-09-07T17:43:21.000 回答
0

看起来 gorp 没有任何东西可以为原始 SQL 或多值插入提供包装器(这始终取决于 SQL 方言)。
您是否担心速度或交易?如果没有,我只会在 for 循环中进行插入。

于 2016-05-02T23:58:39.090 回答