如何在对SQLite3的Python调用中获取可变长度占位符

如何在对SQLite3的Python调用中获取可变长度占位符,python,sqlite,Python,Sqlite,有没有办法在SQL查询中使用可变长度占位符 现在用一个3元组,我写了这样的东西: c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup) 但是,如果tup可以具有不同的长度,可能是4元组或2元组,该怎么办?在这种情况下是否有使用占位符的语法?如果没有,编写代码的首选方法是什么?您必须这样做(以您的示例为例): 通过这种方式,您可以在sqlite3模块解析SQL字符串之前动态创建占位符列表并格式化SQL字符串。我本来希望有这样的

有没有办法在SQL查询中使用可变长度占位符

现在用一个3元组,我写了这样的东西:

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

但是,如果tup可以具有不同的长度,可能是4元组或2元组,该怎么办?在这种情况下是否有使用占位符的语法?如果没有,编写代码的首选方法是什么?

您必须这样做(以您的示例为例):


通过这种方式,您可以在sqlite3模块解析SQL字符串之前动态创建占位符列表并格式化SQL字符串。

我本来希望有这样的占位符列表??或者?*这类东西的变体,但是你的建议会很好。我会写
,'.join('?'表示一个in-tup)
,'.join('?'*len(tup))
@Duncan:Idunno对我来说不太清楚的是更多的信号噪声。生成器的理解似乎更像是英语的“从表中选择*”(%s)”(len(tup)*'?,”)工作,或者SQL查询中不接受最后一个逗号?我希望@eyquem现在已经解决了这个问题,但为了完整性:不,后面的逗号在这里在语法上是无效的,尽管(与SQL一样)。
tup = ... # some sequence/tuple of unknown length
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup)
c.execute(sql, tup)