Maison > développement back-end > Golang > le corps du texte

Comment puis-je utiliser correctement les interfaces de tableau pour les insertions en masse avec « tx.Exec() » de GORM ?

Patricia Arquette
Libérer: 2024-11-25 21:59:10
original
757 Les gens l'ont consulté

How Can I Correctly Use Array Interfaces for Bulk Inserts with GORM's `tx.Exec()`?

Utilisation de l'interface tableau pour les insertions groupées GORM

L'insertion de plusieurs enregistrements dans une base de données peut souvent nécessiter la construction de requêtes SQL complexes. GORM simplifie ce processus, mais il est important de comprendre comment transmettre correctement plusieurs valeurs à l'aide d'une interface tableau.

Considérez le code suivant :

vals := append(vals, "XX1", "Jakarta")
vals = append(vals, "XX2", "Bandung")

tx.Exec(sqlStr, vals)
Copier après la connexion

Ce code entraînerait l'erreur suivante :

Error 1136: Column count doesn't match value count at row 1
Copier après la connexion

Cela est dû au fait que la requête attend quatre valeurs (code, nom, code, nom), mais les vals de l'interface du tableau sont transmises comme un seul argument au lieu de éléments individuels.

Pour résoudre ce problème, nous devons utiliser l'opérateur "..." pour "décompresser" l'interface du tableau et transmettre chaque élément individuellement :

tx.Exec(sqlStr, vals...)
Copier après la connexion

La signature de tx .Exec() est :

func (tx *Tx) Exec(query string, args ...interface{}) (Result, error)
Copier après la connexion

Donc, nous devons passer vals comme vals.... Voici le corrigé code :

res, err := tx.Exec(sqlStr, vals...)
Copier après la connexion

Maintenant, la requête sera exécutée correctement, générant l'instruction SQL souhaitée :

INSERT INTO city(code, name) VALUES ('XX1', 'Jakarta'),('XX2', 'Bandung')
Copier après la connexion

N'oubliez pas de vérifier l'erreur renvoyée (err) après l'exécution de la requête.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal