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

如何将Python Timestamp列表转为日期格式传入SQL查询WHERE子句

解决Timestamp列表转SQL日期字符串的问题

你遇到的核心问题有两个:一是tolist()得到的是Python的Timestamp对象,直接用repr()输出的格式SQL无法识别;二是想用多个日期匹配时,应该用IN而不是=(用=只会匹配单个值,多个值会导致语法错误)。下面是具体的解决步骤:


1. 先把Timestamp转换为标准日期字符串列表

首先要把DataFrame里的Timestamp类型日期转成SQL能识别的'YYYY-MM-DD'格式字符串,再生成列表:

# 使用dt.strftime将Timestamp转为指定格式的字符串,再转成列表
begdtlist = df["BEG_DT"].dt.strftime('%Y-%m-%d').tolist()

执行后begdtlist会变成:

['2018-04-29', '2018-04-22', '2018-04-22', '2018-04-29', '2018-04-29']

2. 正确构建SQL的IN查询语句

接下来把列表转成SQLIN子句需要的带单引号的格式,再拼接到SQL中:

# 把列表元素用单引号包裹,并用逗号分隔
date_clause = ','.join(f"'{date}'" for date in begdtlist)

# 拼接完整SQL语句
sql = f"select calndr_dt,wk_of_mnth from DatabaseName where calndr_dt IN ({date_clause})"

最终生成的SQL语句会是:

select calndr_dt,wk_of_mnth from DatabaseName where calndr_dt IN ('2018-04-29','2018-04-22','2018-04-22','2018-04-29','2018-04-29')

补充说明

  • 如果你的BEG_DT列已经是字符串格式的日期,直接用df["BEG_DT"].tolist()即可,不需要dt.strftime转换。
  • 尽量避免直接用字符串拼接SQL语句(存在SQL注入风险),如果你的数据库连接库支持参数化查询(比如pandas.read_sql的params参数、psycopg2的参数绑定),优先使用参数化方式传入列表,比如:
    import pandas as pd
    from sqlalchemy import create_engine
    
    engine = create_engine('your_database_connection_string')
    sql = "select calndr_dt,wk_of_mnth from DatabaseName where calndr_dt IN %(dates)s"
    df_result = pd.read_sql(sql, engine, params={'dates': begdtlist})
    

内容的提问来源于stack exchange,提问作者jorge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:01:18