在 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"})
我有一个要插入数据库的流派列表。当应用程序第一次运行时,只需执行一次。因此,我试图插入忽略,但它给了我一些错误。
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"})