Как получить заполнители переменной длины в вызове Python для SQLite3
Есть ли способ использовать заполнители переменной длины в SQL-запросе?
Прямо сейчас, используя 3-кортеж, я пишу что-то вроде этого:
c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup)
Но что, если tup может иметь разную длину, возможно, 4-кортеж или 2-кортеж? Есть ли синтаксис для использования заполнителей в этой ситуации? Если нет, то какой предпочтительный способ написать код?
Ответы
Ответ 1
Вам нужно будет сделать что-то вроде этого (чтобы использовать ваш пример):
tup = ... # some sequence/tuple of unknown length
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup)
c.execute(sql, tup)
Таким образом вы динамически создаете список закладок и форматируете строку SQL до того, как модуль sqlite3 проанализирует его.