将字符串列表绑定到 IN 子句 [重复]

Posted

技术标签:

【中文标题】将字符串列表绑定到 IN 子句 [重复]【英文标题】:Binding a list of strings to an IN clause [duplicate] 【发布时间】:2010-07-09 12:31:35 【问题描述】:

可能重复:python list in sql query as parameter

考虑一下(在这里使用apsw):

s = ["A", "B", "C"]
c.execute("SELECT foo.y FROM foo WHERE foo.x in (?)", (s, ))

这不起作用,因为绑定参数不能是列表。我想将字符串列表绑定到?。我知道如何手动构建适当的查询字符串,但我想知道是否有办法通过绑定来做到这一点。

【问题讨论】:

你试过tuple(s)而不是(s, )吗? 也许***.com/questions/283645/… 会有所帮助。 @gimel:谢谢,我没看到那个。 @KennyTM:这引发了too many bindings 您需要正确数量的 ?在您的查询字符串中,与列表中的元素一样多。 【参考方案1】:

采用 F*** 的多个问号的想法,怎么样

c.execute("SELECT foo.y FROM foo WHERE foo.x in (%s)" % ', '.join('?' * len(s)), s)

【讨论】:

我应该在回答之前检查 gimel 的链接。答案是一样的。【参考方案2】:

大约 4 年前我遇到过这个问题,然后我发现无法将列表绑定到 sql(我使用的是 mssql 服务器和 ODBC 提供程序,但也考虑了直接 sql 调用) 就我而言,我只是手动构建查询并且它很有效。如果你有一个很长的值列表,你将不得不创建另一个表,在运行时填充它并在你的 sql 中加入它。

【讨论】:

以上是关于将字符串列表绑定到 IN 子句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将超过 1000 个值放入 Oracle IN 子句 [重复]

我可以使用Java代码在sql语句(Oracle)的IN子句中传递字符串列表吗

6.11 将分割数据转换为多值IN列表

带有 IN 子句中参数列表的 PreparedStatement [重复]

使用列表中的in子句加入oracle [重复]

HANA - 将字符串变量传递到 SQL 脚本中的 WHERE IN() 子句