使用 MySQLdb 执行“SELECT ... WHERE ... IN ...”
尽管成功执行了 SQL 查询在 MySQL 命令行中,您可能会遇到使用 MySQLdb 在 Python 中使用“WHERE ... IN ...”语法执行查询的问题。让我们调查问题并探索解决方案。
在您的情况下,您无法使用使用“IN”子句过滤“bar”列的查询检索行,而使用过滤“IN”子句的类似查询则无法检索行。 fooid”列与“IN”成功。这种不一致可以归因于 MySQLdb 处理参数化查询的方式。
当您指定一个值数组作为 MySQLdb 的参数时,它会自动将其转换为带有单引号的字符串元组,从而导致语法不正确“IN”子句。例如,您的代码将 ['A','C'] 转换为 ("'A'","'C'")。
; args=[['A','C']]
要解决此问题,您必须手动构造 SQL 字符串并使用 Python 连接“IN”子句中的值:
<code class="python">args=['A', 'C'] sql='SELECT fooid FROM foo WHERE bar IN (%s)' in_p=', '.join(list(map(lambda x: '%s', args))) sql = sql % in_p cursor.execute(sql, args)</code>
或者,对于 Python 2,您可以使用以下代码:
<code class="python">args=['A', 'C'] sql='SELECT fooid FROM foo WHERE bar IN (%s)' in_p=', '.join(map(lambda x: '%s', args)) sql = sql % in_p cursor.execute(sql, args)</code>
此代码通过以下方式动态生成具有正确数量的占位符 ('%s') 的 SQL 字符串:迭代数组中的值并用逗号将它们连接起来。通过执行这个手动构建的查询,您将获得预期的结果,选择“bar”列位于 ('A','C')
中的 fooids以上是为什么 MySQLdb 中的'SELECT ... WHERE ... IN ...”查询失败?的详细内容。更多信息请关注PHP中文网其他相关文章!