54 votes

Ajouter des guillemets à chaque élément de la liste

Je suis très nouveau en python. J'ai besoin d'un script simple et clair pour ajouter des guillemets à chaque élément de la liste. Laissez-moi vous expliquer plus. Voici mon code.

 parameters = ['a', 'b', 'c']
query = "SELECT * FROM foo WHERE bar IN (%s)" % (', '.join(parameters))

Je veux l'utiliser pour interroger. Mais le résultat est une requête invalide. Voici le résultat.

 SELECT * FROM foo WHERE bar IN (a, b, c, d)

Je veux aimer ça :

 SELECT * FROM foo WHERE bar IN ('a', 'b', 'c', 'd')

Comment ajouter des guillemets tout en joignant des éléments.

91voto

Blender Points 114729

Une solution naïve consisterait à parcourir votre liste parameters et à ajouter des guillemets au début et à la fin de chaque élément :

 (', '.join('"' + item + '"' for item in parameters))

Remarque : ceci est vulnérable à l'injection SQL (qu'elle soit fortuite ou délibérée). Une meilleure solution consiste à laisser la base de données citer et insérer ces valeurs :

 query = "SELECT * FROM foo WHERE bar IN (%s)" % ','.join('?' * len(params))
cursor.execute(query, params)

Il est plus facile à lire et gère correctement les citations.

12voto

Sam Ruby Points 3211

Pour les paramètres simples, ce qui suit devrait fonctionner :

 query = "SELECT * FROM foo WHERE bar IN %s" % repr(tuple(map(str,parameters)))

Cela peut échouer lorsque les noms de paramètres eux-mêmes incluent des guillemets, car les règles d'échappement sont différentes.

9voto

robert Points 10493

Comme vous l'avez demandé, utilisez ceci :

 parameters = ['a', 'b', 'c']
', '.join(map(lambda x: "'" + x + "'", parameters))

Puisque vous créez une requête SQL, veuillez utiliser les fonctionnalités de votre bibliothèque de base de données concernant l'assainissement des entrées ( exemple pour mysqldb ). Vous ne voulez pas vous retrouver avec un problème comme Bobby Tables .

3voto

crizCraig Points 2041

En général (en ignorant SQL)

 In [3]: print(' '.join('"%s"' % x for x in ['a', 'b']))                                                                                                                                              
"a" "b"

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