首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gorm“插入忽略”

Gorm“插入忽略”
EN

Stack Overflow用户
提问于 2020-08-19 11:37:10
回答 2查看 2K关注 0票数 1

我正在尝试在GORM中实现“插入忽略”。我尝试过Create(),但我找不到添加Ignore的方法。我也试过Clause in Gorm

代码语言:javascript
运行
复制
DB.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)`.

然而,我得到了一个错误,说Clauses undefined (type *"github.com/jinzhu/gorm".DB has no field or method Clauses)

我也尝试使用DB.Raw(),但我不知道如何每次更改表,因为我的数据库中有这么多表。例如

代码语言:javascript
运行
复制
DB.Raw("INSERT IGNORE INTO A/B/C/.. ... ...")`. 

我有很多表将通过这个函数,每次我可能会插入到不同的表中。

我想知道是否有人在GORM中有使用Insert Ignore的经验。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-19 23:40:46

大家好,欢迎来到StackOverflow。

我认为您正在使用gorm v1。但是你需要的代码在gorm v2上。

首先,您必须通过在终端上运行以下命令来获取Gorm v2MySQL dialector

代码语言:javascript
运行
复制
go get -u gorm.io/gorm // get gorm v2
go get -u gorm.io/driver/mysql // get dialector of mysql from gorm

然后你可以使用gorm的Clauses

这段代码将为您工作。

代码语言:javascript
运行
复制
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)
    }
}
票数 0
EN

Stack Overflow用户

发布于 2021-05-13 19:36:02

对于Gorm v2来说,答案很明确:Clause in Gorm

对于Gorm v1,您可以在Gorm v1的测试中找到解决方案。请参阅:https://github.com/jinzhu/gorm/blob/master/create_test.go#L285

代码语言:javascript
运行
复制
    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的代码……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63479636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档