Подтвердить что ты не робот

Добавить цитаты в каждый элемент списка

Я очень новичок в python. Мне нужен простой и понятный script, чтобы добавлять кавычки к каждому элементу списка. Позвольте мне объяснить больше. Вот мой код.

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

Я хочу использовать это для запроса. Но результатом является неверный запрос. Вот результат.

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

Мне нравится следующее:

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

Как добавить кавычки при соединении элементов.

4b9b3361

Ответ 1

Наивным решением было бы перебрать ваш список parameters и добавить кавычки в начало и конец каждого элемента:

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

Примечание. Это уязвимо для SQL-инъекций (как случайных, так и преднамеренных). Лучшее решение - дать цитату базы данных и вставить эти значения:

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

Легче читать и обрабатывать корректное цитирование.

Ответ 2

Для простых параметров должно работать следующее:

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

Это может сломаться, когда сами имена параметров включают в себя кавычки, поскольку правила экранирования различаются.

Ответ 3

Как вы просили, используйте это:

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

Поскольку вы создаете SQL-запрос, используйте функции библиотеки базы данных, касающиеся входной санитарии (пример для mysqldb). Вы не хотите, чтобы в итоге возникла проблема, вроде Bobby Tables.

Ответ 4

В общем (игнорирование SQL)

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