我想使用 gorm AutoMigrate 从 CSV 文件插入数据库,并且在插入时我想避免重复输入。我怎样才能做到这一点?请检查随附的代码。
type User struct {
gorm.Model
ID int64 `csv:"_" db:"id"`
FirstName string `csv:"First name" db:"first_name"`
LastName string `csv:"Last name" db:"last_name"`
Emails string `csv:"Emails" db:"emails"`
}
func main() {
file, err := os.Open(os.Args[1])
defer file.Close()
users := []User{}
err = gocsv.Unmarshal(file, &users)
db, err := gorm.Open(postgres.Open("host=xxx.xx.x.x user=database password=password dbname=database port=5432 sslmode=disable"))
err = db.AutoMigrate(&User{})
if err != nil {
panic(err)
}
result := db.Create(users)
if result.Error != nil {
panic(result.Error)
}
}
示例:考虑以下数据
名 | 姓 | 电子邮件 |
---|---|---|
第一的 | 姓名 | first@example.com |
第二 | 姓名 | second@example.com |
第三 | 姓名 | |
向前 | 姓名 | first@example.com |
如果我们传递上面的数据,前 3 行应该插入到数据库中,即我们必须避免重复的电子邮件条目到数据库中。谢谢。
注意:如果电子邮件为空,则应将该行插入数据库。