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

12 投票
1 回答
2540 浏览
提问于 2025-04-17 05:33

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

现在我用的是一个三元组(3-tuple),我写的代码大概是这样的:

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

但是如果这个 tup 的长度不一样,比如说有可能是四元组(4-tuple)或者二元组(2-tuple)呢?在这种情况下,有没有什么语法可以使用占位符?如果没有,写代码的推荐方法是什么?

1 个回答

13

你需要做类似这样的事情(根据你的例子):

tup = ... # some sequence/tuple of unknown length
sql = 'SELECT * FROM table WHERE word IN (%s)' % ', '.join('?' for a in tup)
c.execute(sql, tup)

这样做的好处是,你可以动态地生成占位符列表,并在sqlite3模块解析之前格式化SQL字符串。

撰写回答