golang - mysql Insérer plusieurs données à la fois?
Je sais que Insérer plusieurs données à la fois plus d'efficacité:
INSERT INTO test(n1, n2, n3)
VALUES(v1, v2, v3),(v4, v5, v6),(v7, v8, v9);
Façon de le faire en golang?
data := []map[string]string{
{"v1":"1", "v2":"1", "v3":"1"},
{"v1":"2", "v2":"2", "v3":"2"},
{"v1":"3", "v2":"3", "v3":"3"},
}
//I do not want to do it
for _, v := range data {
sqlStr := "INSERT INTO test(n1, n2, n3) VALUES(?, ?, ?)"
stmt, _ := db.Prepare(sqlStr)
res, _ := stmt.Exec(v["v1"], v["v2"], v["v3"])
}
Utilisation de la chaîne d'épissage, mais il n'est pas bon. db.Préparer les plus sûrs, à droite?
sqlStr := "INSERT INTO test(n1, n2, n3) VALUES"
for k, v := range data {
if k == 0 {
sqlStr += fmt.Sprintf("(%v, %v, %v)", v["v1"], v["v2"], v["v3"])
} else {
sqlStr += fmt.Sprintf(",(%v, %v, %v)", v["v1"], v["v2"], v["v3"])
}
}
res, _ := db.Exec(sqlStr)
J'ai besoin d'une fonction plus sécuritaire et plus efficace insérer plusieurs données à la fois.
source d'informationauteur leiyonglin
Vous devez vous connecter pour publier un commentaire.
pourquoi pas quelque chose comme cela? (écrit ici sans le tester alors il pourrait y avoir des erreurs de syntaxe):
Pas vraiment une réponse à la question telle qu'elle a demandé, mais de toute façon...
Votre "je ne veux pas le faire", extrait de code est étrange: pourquoi êtes-vous de la préparation de l'instruction dans la boucle et pas avant? L'approche correcte serait donc:
Qui est nettement mieux que l'original de votre proposition: vous préparez la déclaration exactement une fois et ensuite l'appeler pour chaque ligne de vos données d'entrée une fois.
Je pense que cette approche n'aurez pas trop de surcharge par rapport à la déclaration de plusieurs tuples après la
VALUES
clause. Le seul véritable inconvénient est que si vous voulez toutes les trois lignes à insérer automatiquement, vous devez mettre les appels àstmt.Exec()
dans la boucle à l'intérieur d'une transaction.