Maison >développement back-end >Golang >Comment créer ou mettre à jour des enregistrements efficacement à l'aide de la fonctionnalité Upsert de GORM ?

Comment créer ou mettre à jour des enregistrements efficacement à l'aide de la fonctionnalité Upsert de GORM ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-08 16:25:02778parcourir

How Do I Create or Update Records Efficiently Using GORM's Upsert Functionality?

Comprendre Upsert dans GORM : créer ou mettre à jour des enregistrements avec élégance

GORM, un ORM populaire dans l'écosystème Go, propose un ensemble robuste de méthodes pour interagir avec une base de données. Parmi ces méthodes figurent FirstOrCreate et FirstOrInit, qui simplifient le processus de création ou de mise à jour d'enregistrements dans la base de données.

Vérification de la création d'enregistrements avec FirstOrInit

Contrairement à FirstOrCreate, la méthode FirstOrInit initialise uniquement une structure sans créer un nouvel enregistrement s'il n'en existe pas. Cela ressort clairement du comportement suivant :

// Initialize a new User struct if one doesn't exist
user := User{Name: "John Doe"}
if err := db.FirstOrInit(&user).Error; err != nil {
    // Error handling
}

// The `user` struct will now be populated with data from the database, if any exist.

Mise à jour des enregistrements avec FirstOrCreate

Contrairement à FirstOrInit, FirstOrCreate crée un nouvel enregistrement s'il n'en existe pas, et si un enregistrement correspondant est trouvé, il le met à jour en fonction des champs fournis.

// Create or update a User record
user := User{ID: 1, Name: "Jane Doe"}
if err := db.FirstOrCreate(&user).Error; err != nil {
    // Error handling
}

// The record with ID 1 will either be created or updated depending on its existence.

Upsert avec GORM 1.20.x et prise en charge en cas de conflit

GORM 1.20.x a introduit la prise en charge Upsert compatible pour diverses bases de données. Cela offre un moyen plus efficace de vérifier l'existence d'un enregistrement et d'effectuer l'action appropriée.

// Upsert using On-Conflict clause
DB.Clauses(clause.OnConflict{
  Columns:   []clause.Column{{Name: "id"}}, // Key column
  DoUpdates: clause.AssignmentColumns([]string{"name", "age"}), // Columns to be updated
}).Create(&user)

Upsert avec GORM 1.9.x et versions antérieures

Pour les versions GORM 1.9.x et versions antérieures, un Une approche plus efficace consiste à mettre d'abord à jour l'enregistrement et à le créer uniquement si la mise à jour échoue (enregistrement introuvable).

// Update existing record, if any
if err := db.Model(&user).Where("id = ?", 3333).Update("name", "Nick").Error; err != nil {
    // Record not found, create new record
    if gorm.IsRecordNotFoundError(err) {
        db.Create(&user)
    }
}

Conclusion

Comprendre les nuances entre les méthodes FirstOrInit et FirstOrCreate, ainsi que la prise en charge d'Upsert dans GORM est cruciale pour des opérations efficaces de création et de mise à jour d'enregistrements dans vos applications Go. En exploitant efficacement ces fonctionnalités, vous pouvez rationaliser les interactions de votre base de données et maintenir l'intégrité des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn