gpt4 book ai didi

python - MySQL "IN"查询中的多个参数

转载 作者:行者123 更新时间:2023-11-29 09:49:38 26 4
gpt4 key购买 nike

我显然在参数化中做错了什么,但不确定正确的语法是什么。

需要,但不起作用:where 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')}]

不需要,但有效:where 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
"""

关于python - MySQL "IN"查询中的多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55031850/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com