蓝色 "Insert Ignore"
Gorm "Insert Ignore"
我正在尝试在 GORM 中实现“插入忽略”。我尝试了 Create()
,但找不到添加 Ignore
的方法。我也试过Clause in Gorm,
DB.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)`.
但是,我收到一条错误消息 Clauses undefined (type *"github.com/jinzhu/gorm".DB has no field or method Clauses)
。
我也尝试过使用 DB.Raw()
,但我不知道如何每次更改 table,因为我的数据库中有这么多 table。例如
DB.Raw("INSERT IGNORE INTO A/B/C/.. ... ...")`.
我有很多 table 会通过这个函数,每次我可能会插入到不同的 table。
我想知道是否有人在 GORM 中使用过 Insert Ignore
。谢谢!
您好,欢迎来到 Whosebug。
我认为您正在使用 gorm v1
。但您需要的代码在 gorm v2
.
首先,您必须在终端上通过 运行 此命令获取 Gorm v2
和 MySQL dialector
。
go get -u gorm.io/gorm // get gorm v2
go get -u gorm.io/driver/mysql // get dialector of mysql from gorm
那你就可以使用gorm的Clauses
了。
此代码适合您。
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
func main(){
db, err := gorm.Open(mysql.Open(MYSQL_CONNECTION_STRING), &gorm.Config{})
if err != nil {
fmt.Println(err.Error())
}else{
db.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)
}
}
对于Gorm v2
,答案很明确:Clause in Gorm。
对于Gorm v1
,您可以在Gorm v1
的测试中找到解决方案。
参考:https://github.com/jinzhu/gorm/blob/master/create_test.go#L285
if DB.Dialect().GetName() == "mysql" && DB.Set("gorm:insert_modifier", "IGNORE").Create(&user).Error != nil {
t.Error("Should ignore duplicate user insert by insert modifier:IGNORE ")
}
我多次遇到这个问题,因为我们团队中的很多人仍然有很多代码使用 Gorm v1
...
我正在尝试在 GORM 中实现“插入忽略”。我尝试了 Create()
,但找不到添加 Ignore
的方法。我也试过Clause in Gorm,
DB.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)`.
但是,我收到一条错误消息 Clauses undefined (type *"github.com/jinzhu/gorm".DB has no field or method Clauses)
。
我也尝试过使用 DB.Raw()
,但我不知道如何每次更改 table,因为我的数据库中有这么多 table。例如
DB.Raw("INSERT IGNORE INTO A/B/C/.. ... ...")`.
我有很多 table 会通过这个函数,每次我可能会插入到不同的 table。
我想知道是否有人在 GORM 中使用过 Insert Ignore
。谢谢!
您好,欢迎来到 Whosebug。
我认为您正在使用 gorm v1
。但您需要的代码在 gorm v2
.
首先,您必须在终端上通过 运行 此命令获取 Gorm v2
和 MySQL dialector
。
go get -u gorm.io/gorm // get gorm v2
go get -u gorm.io/driver/mysql // get dialector of mysql from gorm
那你就可以使用gorm的Clauses
了。
此代码适合您。
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)
func main(){
db, err := gorm.Open(mysql.Open(MYSQL_CONNECTION_STRING), &gorm.Config{})
if err != nil {
fmt.Println(err.Error())
}else{
db.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)
}
}
对于Gorm v2
,答案很明确:Clause in Gorm。
对于Gorm v1
,您可以在Gorm v1
的测试中找到解决方案。
参考:https://github.com/jinzhu/gorm/blob/master/create_test.go#L285
if DB.Dialect().GetName() == "mysql" && DB.Set("gorm:insert_modifier", "IGNORE").Create(&user).Error != nil {
t.Error("Should ignore duplicate user insert by insert modifier:IGNORE ")
}
我多次遇到这个问题,因为我们团队中的很多人仍然有很多代码使用 Gorm v1
...