408 votes

Clause IN de SQLAlchemy

J'essaye de faire cette requête dans sqlalchemy

SELECT id, name FROM user WHERE id IN (123, 456)

Je voudrais lier la liste [123, 456] au moment de l'exécution.

-3voto

MajiD Points 368

Juste un complément aux réponses ci-dessus.

Si vous voulez exécuter un SQL avec une instruction "IN", vous pouvez faire ceci :

ids_list = [1,2,3]
query = "SELECT id, name FROM user WHERE id IN %s" 
args = [(ids_list,)] # Don't forget the "comma", to force the tuple
conn.execute(query, args)

Deux points :

  • Il n'y a pas besoin de parenthèses pour l'instruction IN (comme "... IN(%s)"), il suffit de mettre "...IN %s".
  • Force la liste de vos identifiants à être un élément d'un tuple. N'oubliez pas le " , " : (ids_list,)

EDIT Attention, si la longueur de la liste est égale à un ou zéro, une erreur se produira !

2 votes

Je pense que vous devriez faire args = [(tuple(ids_list),)] s'il vous plaît, vérifiez.

7 votes

L'OP demande comment faire cela dans sqlalchemy, et non en utilisant un appel dbapi brut...

0 votes

Cela ne fonctionne pas avec une liste à un seul élément car cela produit (item, ) et c'est incorrect en SQL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X