如何在Python调用SQLite3时获取可变长度占位符
有没有办法在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字符串。