Правильный способ "выбрать * из таблицы, где поле?" и заполнитель является списком без интерполяции строк
У меня есть запрос этой формы, используя pysqlite:
query = "select * from tbl where field1 in ?"
variables = ['Aa', 'Bb']
В запросе я хотел бы, чтобы это работало:
with conn.cursor() as db:
res = db.execute(query, (variables,)).fetchall()
например, интерпретируется в командной строке SQLITE как:
select * from tbl where field1 in ("Aa", "Bb");
Но это не так с:
pysqlite3.dbapi2.InterfaceError: Error binding parameter 0 - probably unsupported type.
Я понимаю, что могу просто string.join([mylist]), но это небезопасно. Как я могу использовать параметры заполнителя и список в SQLite с Python?
Обновить
В отличие от аналогичных вопросов по Stackru, они, похоже, стремятся использовать%s строковую интерполяцию, где я пытаюсь избежать этого
1 ответ
Вопрос:
WHERE field IN ?
и заполнитель является списком без интерполяции строк
Значения представляют собой список
int
values = (42, 43, 44)
Подготовьте ваш запрос с количеством привязок
bindings = '?,'*len(values) QUERY = "SELECT * FROM t1 WHERE id IN ({});".format(bindings[:-1]) print("{}".format(QUERY))
Выход:
SELECT * FROM t1 WHERE id IN (?,?,?);
Выполнить запрос
cur.execute (QUERY, values)