MySQL“IN”查询中的多个参数

问题描述 投票:0回答: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})
python mysql pandas sqlalchemy pymysql
1个回答
1
投票

删除占位符周围的括号。因为查询是在pymysql完成参数替换后将word(('lol', 'hi'))进行比较,或者换句话说是对元组的标量。长度为1的列表很好,因为结果是(('hi')),并且SQL在比较时实际上将标量word视为1列行,这可能是稍微不明显的错误提示。

所以查询应该如下所示:

query = """
    select word, count(1)
    from table
    where word in %(ids)s
    group by 1
    """
© www.soinside.com 2019 - 2024. All rights reserved.