Gestion des instructions "WHERE _ IN ___" dans SQLite
Lors de l'utilisation d'un WHERE IN instruction dans SQLite, il est crucial de s'assurer de la bonne construction de l'instruction pour éviter les erreurs. Le problème survient lorsque le nombre de liaisons fournies ne correspond pas au nombre attendu, ce qui entraîne une erreur de programmation.
Pour résoudre ce problème, vous devez modifier votre instruction pour inclure le nombre correct de points d'interrogation (?) comme paramètres. Par exemple :
statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars)))
Ici, nous générons une chaîne de points d'interrogation séparés par des virgules en utilisant join([?]*len(list_of_vars))_, permettant une liaison correcte des valeurs des paramètres. Par exemple, si _list_of_vars contient ['foo', 'bar'], l'instruction devient :
"SELECT * FROM tab WHERE obj IN (?, ?)"
Maintenant, vous pouvez exécuter cette instruction en passant list_of_vars comme valeurs des paramètres :
c.execute(statement, list_of_vars)
Bien que des méthodes alternatives puissent exister, l'utilisation de paramètres de liaison est recommandée pour empêcher les attaques par injection SQL. Pour les listes longues, l'utilisation d'une table temporaire pour les valeurs et la jointure à celle-ci peuvent améliorer l'efficacité.
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!