You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python连接Amazon Redshift时如何将起止日期变量嵌入SQL查询

错误原因

你当前的变量拼接写法不符合Python字符串拼接规则,三引号内的逗号和变量名会被直接识别为SQL文本的一部分,最终生成的SQL里日期位置是字面量", start_date , ",自然不符合Redshift的日期格式要求,触发报错。

推荐解决方案(参数化查询,无SQL注入风险)

你用的text()方法原生支持参数绑定,不需要手动拼接日期变量,写法如下:

start_date = '2019-07-01'
end_date = '2021-07-01'

# SQL中用:参数名作为占位符,不需要额外加引号
try_sql = """
select * from users where created_at >= :start_date and created_at < :end_date limit 10;
"""

# 执行查询时通过params参数传入变量字典
try_data = pd.read_sql_query(text(try_sql), engine, params={"start_date": start_date, "end_date": end_date})
try_data.head(3)

可选解决方案(字符串格式化,仅适合调试场景)

如果需要直接拼接字符串,可以用f-string或format方法处理,不要用逗号拼接:

f-string写法(Python 3.6+支持)

start_date = '2019-07-01'
end_date = '2021-07-01'

try_sql = f"""
select * from users where created_at >= '{start_date}' and created_at < '{end_date}' limit 10;
"""

format写法

start_date = '2019-07-01'
end_date = '2021-07-01'

try_sql = """
select * from users where created_at >= '{}' and created_at < '{}' limit 10;
""".format(start_date, end_date)

注意:字符串格式化方法存在SQL注入风险,仅可在参数完全可控的调试场景使用,生产环境必须用参数化查询方案。

内容的提问来源于stack exchange,提问作者Crubal Chenxi Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 15:15:03