Middle — Middle+
Quelles approches existent pour former une requête SQL SELECT à la volée avec la possibilité de modifier dynamiquement les conditions et les paramètres?
sobes.tech IA
Réponse de l'IA
Pour la formation dynamique de requêtes SQL SELECT en Go, il existe plusieurs approches:
-
Concaténation de chaînes — la méthode la plus simple, mais non sécurisée, sujette aux injections SQL.
-
Utilisation de requêtes paramétrées avec les packages
database/sqlet en passant des arguments via?ou$1. -
Constructeurs de requêtes (query builders) — bibliothèques permettant de former des requêtes de manière programmatique avec des conditions, des tris, etc.
Exemple utilisant la bibliothèque Squirrel:
import (
"github.com/Masterminds/squirrel"
"database/sql"
_ "github.com/lib/pq"
)
func buildQuery(age int, active bool) (string, []interface{}, error) {
qb := squirrel.Select("id", "name").From("users")
if age > 0 {
qb = qb.Where(squirrel.Gt{"age": age})
}
if active {
qb = qb.Where(squirrel.Eq{"active": true})
}
return qb.ToSql()
}
func main() {
db, _ := sql.Open("postgres", "connection_string")
query, args, _ := buildQuery(30, true)
rows, _ := db.Query(query, args...)
defer rows.Close()
// traitement des résultats
}
Cette approche permet d’ajouter dynamiquement des conditions et des paramètres, évitant erreurs et injections SQL.
Il est également possible d’utiliser un ORM ou des wrappers personnalisés pour construire des requêtes.