Есть ли способ передать список python в качестве параметра подготовленного оператора в pymysql?
list_id = [1,2,3]
sql = "select * from table where id in (%s)"
cursor.execute(sql,(list_id,))
Я бы сделал это так.
list_id = [1,2,3]
sql = "select * from table where id in ({})".format(",".join([str(i) for i in list_id]))
print(sql)
Out[]: "select * from table where id in (1,2,3)"
Если вам нужен альтернативный способ выполнения выполнения, вот еще одна ссылка на выполнение большого количества курсоров через библиотеку pyodbc
. Надеюсь, поможет.
executemany (sql, * params)
Выполняет ту же инструкцию SQL для каждого набора параметров, возвращая None. Параметр одиночных параметров должен быть последовательностью последовательностей или генератором последовательностей.
params = [('A', 1), ('B', 2)] executemany ("insert into t (name, id) values (?,?)", params) Это будет выполнять инструкцию SQL дважды, один раз с ('A', 1) и один раз ('B', 2).
IN
а затем предоставить список.
если ваш список будет иметь только целые числа, тогда вам придется объединить их с символом "," и передать как строку.
list_id = [1,2,3]
# not working:
list_str = ', '.join(list_id)
# most likely:
list_str = ', '.join(map(str, list_id))
Но гораздо лучший способ предотвратить создание сумасшедших заявлений - https://www.python.org/dev/peps/pep-0249/#paramstyle или, как упоминалось в двойном ответе выше. )
SELECT * FROM table WHERE id IN (?,?,?)
», Отдельным знаком вопроса для каждого значения. Мы могли бы написать код для подсчета количества значений в списке, а затем динамически сгенерировать оператор SQL с необходимым количеством заполнителей.