список Python в запросе SQL как параметр

104
задан User12345 28 June 2018 в 23:04
поделиться

3 ответа

Ответы до сих пор обрабатывали значения по шаблону в простую строку SQL. Это абсолютно хорошо для целых чисел, но если мы хотели сделать это для строк, мы получаем проблему выхода.

Вот вариант с помощью параметризированного запроса, который работал бы на обоих:

placeholder= '?' # For SQLite. See DBAPI paramstyle.
placeholders= ', '.join(placeholder for unused in l)
query= 'SELECT name FROM students WHERE id IN (%s)' % placeholders
cursor.execute(query, l)
96
ответ дан bobince 24 November 2019 в 04:10
поделиться

SQL, который Вы хотите,

select name from studens where id in (1, 5, 8)

, Если Вы хотите создать это из Python, Вы могли бы использовать

l = [1, 5, 8]
sql_query = 'select name from studens where id in (' + ','.join(map(str, l)) + ')'

, функция карты преобразует список в список строк, которые могут быть склеены запятыми с помощью метод str.join .

, Кроме того:

l = [1, 5, 8]
sql_query = 'select name from studens where id in (' + ','.join((str(n) for n in l)) + ')'

, если Вы предпочитаете выражения генератора к функции карты.

ОБНОВЛЕНИЕ: S. Lott упоминает в комментариях, что привязка Python SQLite не поддерживает последовательности. В этом случае Вы могли бы хотеть

select name from studens where id = 1 or id = 5 or id = 8

Сгенерированный [1 115]

sql_query = 'select name from studens where ' + ' or '.join(('id = ' + str(n) for n in l))
21
ответ дан Community 24 November 2019 в 04:10
поделиться

string.join значения списка, разделенные запятыми и использованием оператор формата для формирования строки запроса.

myquery = "select name from studens where id in (%s)" % ",".join(map(str,mylist))

(Спасибо, blair-conrad)

10
ответ дан Community 24 November 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: