Maison > développement back-end > Golang > Quand et pourquoi dois-je utiliser « db.Exec() » et les instructions préparées dans Go ?

Quand et pourquoi dois-je utiliser « db.Exec() » et les instructions préparées dans Go ?

Mary-Kate Olsen
Libérer: 2024-12-07 22:37:15
original
993 Les gens l'ont consulté

When and Why Should I Use `db.Exec()` and Prepared Statements in Go?

Pourquoi même utiliser *DB.exec() ou des instructions préparées dans Golang ?

"Pourquoi même utiliser db.Exec()"

Alors vous pouvez utiliser db.Exec et db.Query de manière interchangeable pour les mêmes instructions SQL, elles donnent des résultats différents. db.Exec renvoie le nombre de lignes affectées (si pris en charge par le pilote), tandis que db.Query renvoie un objet rows.

Par exemple, pour compter le nombre de lignes supprimées dans une instruction DELETE :

res, err := db.Exec(`DELETE FROM my_table WHERE expires_at = `, time.Now())
numDeleted, err := res.RowsAffected() // Returns the number of deleted rows
Copier après la connexion

Alternative (mais moins efficace) :

rows, err := db.Query(`DELETE FROM my_table WHERE expires_at =  RETURNING *`, time.Now())
numDeleted := 0
for rows.Next() { numDeleted++ } // Iterate over deleted rows
Copier après la connexion

db.Exec doit également être utilisé lorsque vous n'avez pas besoin du résultats de la requête, seulement une vérification d'erreur :

if _, err := db.Exec(`<my_sql_query>`); err != nil { panic(err) }
Copier après la connexion

"ou des instructions préparées dans Golang ?"

L'affirmation de la documentation selon laquelle Go utilise toujours des instructions préparées sous les couvertures n'est peut-être pas correcte. L'implémentation du pilote semble déterminer si une nouvelle instruction préparée est créée pour chaque appel à db.Query.

Cependant, appeler manuellement db.Prepare et mettre en cache le db.Stmt résultant peut améliorer les performances des requêtes fréquemment exécutées. Reportez-vous à la documentation PostgreSQL pour plus de détails : https://www.postgresql.org/docs/current/static/sql-prepare.html

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