我正在尝试使用IN语句返回与字符串列表中的一个匹配的结果
例如
strings = ['string1', 'string2', 'string3']
c.execute('select count(*) from table where foo in ?', strings)
我知道这是不正确的并且不起作用,但我希望它突出了我想要做的......
答案 0 :(得分:6)
你做不到。有三个问题:
table
的表。请改为尝试:
sql = 'SELECT COUNT(*) FROM yourtable WHERE foo IN (?, ?, ?)'
如果字符串数量是可变的,请改用:
params = ','.join('?' for x in strings)
sql = 'SELECT COUNT(*) FROM yourtable WHERE foo IN (' + params + ')'
答案 1 :(得分:2)
你可以做','.join(strings)
,因为@Mark Byers建议,大多数时候都有效。但是,如果字符串的数量非常长,它将失败,因为SQL查询具有有限的长度。
另一种方法是创建临时表,插入所有字符串并执行连接以执行交集,类似
c.execute('CREATE TEMP TABLE strings (s STRING)')
c.executemany('INSERT INTO strings (s) VALUES (?)', ((s,) for s in strings))
c.execute('SELECT COUNT(*) FROM table JOIN strings ON table.foo == strings.s')