Как получить заполнители переменной длины в вызове Python для SQLite3 - PullRequest
11 голосов
/ 03 ноября 2011

Есть ли способ использовать заполнители переменной длины в запросе SQL?

Прямо сейчас с 3-мя кортежами я пишу что-то вроде этого:

c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup)

Но что, если tup может иметь различную длину, возможно, 4-кортежный или 2-кортежный? Есть ли синтаксис для использования заполнителей в этой ситуации? Если нет, то какой способ написания кода предпочтителен?

1 Ответ

12 голосов
/ 03 ноября 2011

Вы должны сделать что-то вроде этого (чтобы использовать ваш пример):

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 проанализирует ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...