在 gorm golang 中插入忽略查询给出错误

Insert Ignore query giving error in gorm golang

我有一个要插入数据库的流派列表。当应用程序第一次运行时,只需执行一次。因此,我试图插入忽略,但它给了我一些错误。

GenreCategoires 结构:

type GenreCategories struct {
    Category string `gorm:"unique"`
}

查询如下:

func (a *App) setupGenreCategories() {
    for _, value := range handler.GenreCategorySlice {
        a.DB.Clauses(clause.Insert{Modifier: "ignore"}).Create(&models.GenreCategories{
            Category: value,
        })
        // Alternate approach but with the same errors:
        if a.DB.Model(&models.GenreCategories{}).Where("category = ?", value).RowsAffected == 0 {
            a.DB.Create(&models.GenreCategories{
                Category: value,
            })
        }
    }
}

这是我收到的错误:

near "ignore": syntax error
[0.019ms] [rows:0] INSERT ignore INTO `genre_categories` (`category`) VALUES ("sunsets")

替代方法,报错如下:

UNIQUE constraint failed: genre_categories.category
[0.056ms] [rows:0] INSERT INTO `genre_categories` (`category`) VALUES ("sunsets")

是我的语法错误还是与gorm v2有关,我使用的是gorm v1.22,希望这些信息足够了。提前致谢。

您正在为 Sqlite3 使用 MySQL 语法,这显然会导致问题。在 sqlite 中你需要做 INSERT OR IGNORE,而不是 INSERT IGNORE,所以你很可能只需要改变

a.DB.Clauses(clause.Insert{Modifier: "ignore"})

a.DB.Clauses(clause.Insert{Modifier: "or ignore"})