将字符串列表绑定到IN子句
可能重复的问题:
在SQL查询中将Python列表作为参数
考虑这个情况(这里使用的是apsw):
s = ["A", "B", "C"]
c.execute("SELECT foo.y FROM foo WHERE foo.x in (?)", (s, ))
这个方法不行,因为绑定参数不能是一个列表。我想把一个字符串列表绑定到?
上。我知道怎么手动构建合适的查询字符串,但我想知道有没有办法通过绑定来实现这个。
2 个回答
0
大约四年前我遇到了这个问题,后来我发现把列表绑定到sql是不可能的(我当时使用的是mssql服务器和ODBC提供程序,也考虑过直接使用sql调用)。
在我的情况下,我只是手动构建查询,这样做效率很高。如果你有一个非常长的值列表,你就需要创建另一个表,在运行时填充这个表,然后在你的sql中与它进行连接。
1
根据Fabian的建议,使用多个问号的想法,怎么样呢
c.execute("SELECT foo.y FROM foo WHERE foo.x in (%s)" % ', '.join('?' * len(s)), s)