MySQL "IN" 查询中的多个参数
Multiple parameters in MySQL "IN" query
我显然在参数化中做错了什么,但不确定正确的语法是什么。
需要,但不起作用:IN
中的多个条件
data = ['lol', 'hi']
query = """ select word, count(1) from table where word in (%(ids)s) group by 1"""
pandas.read_sql_query(sql=query, con=db_engine, params={'ids':data})
输出:
InternalError: (pymysql.err.InternalError) (1241, 'Operand should contain 1 column(s)') [SQL: "select word, count(1) from table where word in (%(ids)s) group by 1 "] [parameters: {'ids': ('lol', 'hi')}]
不需要,但有效:IN 中的单一条件
(长度为 1 的列表没问题)
data = ['lol']
query = """ select word, count(1) from table where word in (%(ids)s) group by 1"""
pandas.read_sql_query(sql=query, con=db_engine, params={'ids':data})
删除占位符周围的括号。因为它是查询在 pymysql 完成参数替换后将 word
与 (('lol', 'hi'))
进行比较,或者换句话说,将标量与元组进行比较。长度为 1 的列表很好,因为结果是 (('hi'))
并且 SQL 在比较时实际上将标量 word
视为 1 列行,这可能是稍微不明显的错误提示。
所以查询应该如下所示:
query = """
select word, count(1)
from table
where word in %(ids)s
group by 1
"""
我显然在参数化中做错了什么,但不确定正确的语法是什么。
需要,但不起作用:IN
中的多个条件data = ['lol', 'hi']
query = """ select word, count(1) from table where word in (%(ids)s) group by 1"""
pandas.read_sql_query(sql=query, con=db_engine, params={'ids':data})
输出:
InternalError: (pymysql.err.InternalError) (1241, 'Operand should contain 1 column(s)') [SQL: "select word, count(1) from table where word in (%(ids)s) group by 1 "] [parameters: {'ids': ('lol', 'hi')}]
不需要,但有效:IN 中的单一条件 (长度为 1 的列表没问题)
data = ['lol']
query = """ select word, count(1) from table where word in (%(ids)s) group by 1"""
pandas.read_sql_query(sql=query, con=db_engine, params={'ids':data})
删除占位符周围的括号。因为它是查询在 pymysql 完成参数替换后将 word
与 (('lol', 'hi'))
进行比较,或者换句话说,将标量与元组进行比较。长度为 1 的列表很好,因为结果是 (('hi'))
并且 SQL 在比较时实际上将标量 word
视为 1 列行,这可能是稍微不明显的错误提示。
所以查询应该如下所示:
query = """
select word, count(1)
from table
where word in %(ids)s
group by 1
"""