Как получить заполнители переменной длины в вызове 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 проанализирует его.