Правильный способ "выбрать * из таблицы, где поле?"и заполнитель является списком без интерполяции строк - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть запрос этой формы, использующий pysqlite:

query = "select * from tbl where field1 in ?"
variables = ['Aa', 'Bb']

В запросе я хотел бы, чтобы это работало:

with conn.cursor() as db:
  res = db.execute(query, (variables,)).fetchall()

Например, интерпретируется в командной строке SQLITEas:

select * from tbl where field1 in ("Aa", "Bb");

Но это не с:

pysqlite3.dbapi2.InterfaceError: Error binding parameter 0 - probably unsupported type.

Я понимаю, что могу просто string.join ([mylist]), но это небезопасно.Как я могу использовать параметры-заполнители и список в sqlite с python?

Обновление

Отличая этот от аналогичных вопросов по Stackoverflow , они, похоже, надеются использовать% sинтерполяция строк, где я ищу, чтобы избежать этого

1 Ответ

0 голосов
/ 31 декабря 2018

Вопрос : 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)
    
...