Python执行含CASE的SQL语句报错,SQL端正常运行求帮助
问题分析与解决
核心错误原因
- execute方法传参错误:你把完整SQL拆成两个字符串传给
cursor.execute,第二个字符串会被当作参数化查询的参数,而非SQL语句的一部分,导致CASE逻辑根本没被数据库解析执行。 - SQL自身语法问题:
- 引号嵌套混乱:
cast("("created_date")")写法完全错误,无需额外括号和嵌套引号,直接写cast(created_date as DATE)即可。 - 字符串常量未加引号:
Yes/No是字符串值,必须用单引号包裹,多余的括号也可以去掉。 - 重复指定表:原代码里写了两次
from analitics,属于语法错误。
- 引号嵌套混乱:
修正后的代码
把完整的正确SQL作为单个字符串传入execute方法:
cursor.execute(''' SELECT DISTINCT created_date, CASE WHEN CAST(created_date AS DATE) = CAST(NOW() AS DATE) THEN 'Yes' ELSE 'No' END AS is_today FROM analitics ''')
额外说明
- 用三引号
'''编写多行SQL,既能避免单行字符串的引号冲突,也让SQL结构更清晰。 - 给CASE语句的结果列起别名
is_today,方便后续读取结果时对应字段。 - 如果使用MySQL,
CAST(NOW() AS DATE)可以简化为CURDATE(),效果一致。
内容的提问来源于stack exchange,提问作者skrtsway
相关产品推荐
相关产品推荐

