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