Я имею в виду что-то вроде этого:передавая много аргументов в одном заполнителе Джанго курсора (placeholer в IN)
from django.db import connection
cursor=connection.cursor()
cursor.execute('SELECT * FROM mytable where id IN (%s)', [params])
Параметры не могут быть просто итерацию - это не работает. Не может быть также в формате CSV из-за исключения значения обработчиком db.
Как использовать заполнитель в пределах IN
?
По CSV не так, я имею в виду, что для params=['1','2','3','4','5']
c.execute('select * from mytable where id in (%s)', [','.join(params)])
будет производить:
select * from mytable where id in ('1,2,3,4,5')
но правильный SQL является:
select * from mytable where id in (1,2,3,4,5)
и, кажется, с заполнители.
Не уверен, что вы подразумеваете под «не может быть в формате CSV». IN ожидает список значений, которые обязательно должны быть разделены запятой. Если ваши 'params' являются списком, вы должны сделать что-то вроде' ', '. Join (params)'. Это преобразует список как '[1, 2, 3]' в строку типа '1,2,3'. –
Будьте осторожны с использованием '% s' в качестве заполнителя в SQl, он может оставить вас уязвимым для SQL-инъекции https://xkcd.com/327/ –
@Chris_Rands: это не про фикцию' '% s"% params'. –