Maison  >  Article  >  développement back-end  >  ## Comment gérer les requêtes IN avec des tranches dans la base de données/SQL de Go ?

## Comment gérer les requêtes IN avec des tranches dans la base de données/SQL de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 12:42:30788parcourir

## How to Handle IN Queries with Slices in Go's Database/SQL?

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!

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