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

如何用Python将SQL查询结果按日期分别保存为CSV文件

按日期拆分数据并保存为独立CSV文件的解决方案

方法一:Python端处理(推荐,效率更高)

既然已经用pd.read_sql拿到了全量数据,直接在Python里拆分是最省事的,步骤如下:

  1. 确保日期字段格式正确
    先把Date列转换成datetime类型,避免字符串格式匹配问题:

    df['Date'] = pd.to_datetime(df['Date'])
    
  2. 提取唯一日期列表
    如果你只需要按「日期部分」拆分(不含时分秒),用dt.date提取:

    unique_dates = df['Date'].dt.date.unique()
    

    如果要保留完整datetime(比如同一天不同时间的记录分开存),直接用unique():

    unique_dates = df['Date'].unique()
    
  3. 循环拆分并保存CSV
    遍历每个唯一日期,过滤对应数据后保存,文件名用格式化日期避免特殊字符:

    for date in unique_dates:
        # 过滤数据:按日期部分匹配就用dt.date,完整datetime直接匹配
        filtered_df = df[df['Date'].dt.date == date]
        # 格式化日期为文件名友好格式,比如20240520
        filename = f"product_data_{date.strftime('%Y%m%d')}.csv"
        filtered_df.to_csv(filename, index=False)
    

方法二:SQL层面拆分(适合超大数据量)

如果数据量极大,一次性加载到内存压力大,可以先通过SQL获取所有唯一日期,再循环查询每个日期的数据:

  1. 用CTE获取唯一日期
    先执行查询拿到所有不重复的日期:

    # 替换成你的原CTE逻辑
    date_query = """
    WITH original_cte AS (
        SELECT Product_ID, Date, Price, Comment FROM your_table
    )
    SELECT DISTINCT Date FROM original_cte
    """
    dates_df = pd.read_sql(date_query, engine)
    # 转换为列表
    date_list = dates_df['Date'].tolist()
    
  2. 循环查询每个日期的数据并保存

    for date in date_list:
        # 用参数化查询避免SQL注入
        data_query = """
        WITH original_cte AS (
            SELECT Product_ID, Date, Price, Comment FROM your_table
        )
        SELECT * FROM original_cte WHERE Date = %(date_param)s
        """
        daily_df = pd.read_sql(data_query, engine, params={'date_param': date})
        filename = f"product_data_{pd.to_datetime(date).strftime('%Y%m%d')}.csv"
        daily_df.to_csv(filename, index=False)
    

    这种方法需要多次访问数据库,效率不如一次性加载后处理,仅适合数据量特别大的场景。

注意事项

  • 文件名用%Y%m%d格式可以避免斜杠等特殊字符导致的路径错误
  • 如果Date字段包含时分秒,根据需求选择按完整时间还是仅日期拆分
  • 方法二中必须用参数化查询(params参数),避免SQL注入风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:45:52