2010-10-14 6 views
3

Je voudrais utiliser la substitution de chaîne pour une liste séparée par des virgules, tels que:substitution de chaîne Python MySQLdb sans les guillemets ajoutés

query = """SELECT id, name, image_id 
      FROM users 
      WHERE id IN (%s) 
      """ 
values = (','.join(uids)) 
results = dbc.getAll(query, values 

Cette exécute la requête:

SELECT id, name, image_id 
FROM users 
WHERE id IN ('1,2,3') 

qui ne fonctionne comme prévu.

Comment puis-je faire une substution pour que je reçois la requête sans les citations, telles que:

SELECT id, name, image_id 
FROM users 
WHERE id IN (1,2,3) 

Répondre

3

Laissez MySQLdb faire la substitution ensemble des arguments. Dans ce cas, l'argument attendu, values, devrait être la séquence (1,2,3), plutôt que la chaîne '1,2,3':

query = """SELECT id, name, image_id 
      FROM users 
      WHERE id IN %s 
      """  
values = uids 
results = dbc.getAll(query, [values]) 
1

Pour moi, il a travaillé de cette façon:

cursor.execute(sql, (pids_list,)) 

et je me suis assuré que les éléments de la liste pids_list est entiers et non des chaînes.

Questions connexes