首页 >数据库 >mysql教程 >为什么 MySQLdb 中的'SELECT ... WHERE ... IN ...”查询失败?

为什么 MySQLdb 中的'SELECT ... WHERE ... IN ...”查询失败?

Barbara Streisand
Barbara Streisand原创
2024-11-01 17:32:02897浏览

Why is

使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn