11
有没有办法在SQL查询中使用可变长度的占位符?如何在Python调用中获取变长的占位符到SQLite3
现在有一个3元组,我写的是这样的:
c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup)
但如果TUP可以不同长度的东西,也许是4元组或2元组?在这种情况下是否有使用占位符的语法?如果不是,编写代码的首选方法是什么?
有没有办法在SQL查询中使用可变长度的占位符?如何在Python调用中获取变长的占位符到SQLite3
现在有一个3元组,我写的是这样的:
c.execute('SELECT * FROM table WHERE word IN (?, ?, ?)', tup)
但如果TUP可以不同长度的东西,也许是4元组或2元组?在这种情况下是否有使用占位符的语法?如果不是,编写代码的首选方法是什么?
你不得不做这样的事情(使用你的例子):
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的模块解析出来之前。
我曾希望有?或?*变种这类的事情,但你的建议会做得很好。 –
@Duncan:Idunno对我来说似乎不那么清楚了,我会写'','.join('?'作为一个tup)''','.join('?'* len(tup))' – Duncan
@Duncan:更多的信号噪音。生成器的理解看起来更像是英文 – rossipedia