2010-07-09 2 views
2

Possible en double:
python list in sql query as parameterBinding une liste de chaînes à une clause IN

Considérez ceci (en utilisant apsw ici):

s = ["A", "B", "C"] 
c.execute("SELECT foo.y FROM foo WHERE foo.x in (?)", (s,)) 

Cela ne fonctionne pas , car un paramètre de liaison ne peut pas être une liste. Je veux lier une liste de chaînes à ?. Je sais comment construire la chaîne de requête appropriée manuellement, mais je me demande s'il y a un moyen de le faire avec des liaisons.

+0

Avez-vous essayé 'tuple (s)' au lieu de '(s,)'? – kennytm

+3

Peut-être http://stackoverflow.com/questions/283645/python-list-in-sql-query-as-parameter vous aidera. – gimel

+0

@gimel: Merci, je n'ai pas vu celui-là. @KennyTM: Cela soulève "trop ​​de liaisons". –

Répondre

0

J'ai eu ce problème il y a environ 4 ans, puis j'ai découvert qu'il était impossible de lier des listes à sql (j'utilisais serveur MSSQL et fournisseur ODBC, mais aussi considérés comme des appels sql directs)
Dans mon cas, j'étais juste construire les requêtes manuellement et c'était efficace. Dans le cas où vous avez une très longue liste de valeurs, vous devrez créer une autre table, la remplir en runtime et la joindre dans votre sql.

1

Voulez-vous profiter de la question des marques multiples idée par Fabian, que diriez-vous

c.execute("SELECT foo.y FROM foo WHERE foo.x in (%s)" % ', '.join('?' * len(s)), s) 
+0

J'aurais dû vérifier le lien de gimel avant de répondre. C'est la même réponse. –

Questions connexes