Gestion des requêtes IN avec des tranches dans la base de données/SQL de Go
Lors de l'utilisation du package base de données/sql pour les requêtes SQL, les développeurs peuvent rencontrer des défis lorsque traitant des clauses IN et des arguments de tranche. Ce problème se pose car la base de données/sql n'inspecte pas les requêtes et transmet directement les arguments aux pilotes.
Considérez l'exemple suivant :
<code class="go">inq := strings.Join(artIds, ",") rows, err = db.Query("SELECT DISTINCT title FROM tags_for_articles LEFT JOIN tags ON tags.id = tags_for_articles.tag_id WHERE article_id IN (?)", inq)</code>
Cette requête ne fonctionne pas car lorsqu'elle est préparée sous forme d'instruction, la variable de liaison "?" correspond à un seul argument. Cependant, nous avons besoin d’un nombre variable d’arguments en fonction de la longueur de la tranche. Les tentatives pour résoudre ce problème avec la concaténation de chaînes, comme le montre la tentative de solution, entraînent des erreurs.
Solution utilisant le package SQLx
Le package sqlx fournit une solution plus pratique et idiomatique de gérer de telles requêtes avec sa fonction In. En passant la requête et la tranche comme arguments à sqlx.In, nous pouvons traiter la requête avant de l'envoyer à la base de données.
<code class="go">var levels = []int{4, 6, 7} query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)</code>
Une fois la requête traitée, nous pouvons utiliser la chaîne de requête générée et les arguments avec db.Query() comme d'habitude.
Pour référence ultérieure, vous pouvez vous référer au Godoc pour plus d'informations sur InQueries. En adoptant cette approche, les développeurs peuvent gérer efficacement les requêtes IN avec des arguments slice dans leurs programmes Go.
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!