使用 MySQLdb 执行“SELECT ... WHERE ... IN ...”
使用 IN 子句执行 SQL 查询时使用 MySQLdb,请务必注意查询参数的构造方式。
问题
用户在尝试选择 bar 所在的 fooids 时遇到问题 ( 'A','C') 使用 Python 和 MySQLdb。尽管在 mysql 命令行中执行相同的查询,但它在 Python 中没有返回任何行。
根本原因
出现问题是因为 MySQLdb 转换了参数化参数 [' A','C'] 到 ("'A'","'C'"),这导致 IN 子句中的值周围有太多引号。
解决方案
要正确执行查询,必须手动构造查询参数。以下 Python 代码演示了如何实现此目的:
Python 3:
<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>
以上是为什么我的 MySQLdb SELECT ... WHERE ... IN ... 查询不返回结果?的详细内容。更多信息请关注PHP中文网其他相关文章!