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
Mary-Kate Olsenoriginal
2024-12-07 22:37:15966parcourir

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

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

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) }

"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!

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