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

如何用Python循环执行SQL查询,按月递增日期并导出CSV

Python实现按月循环查询SQL并合并结果导出CSV

步骤说明与代码实现

首先确保安装所需依赖包:

pip install pandas sqlalchemy

(根据你的数据库类型,可能需要额外安装驱动:比如MySQL用mysqlclient,PostgreSQL用psycopg2-binary,SQL Server用pyodbc)

1. 生成目标日期序列

生成2015-01-01到2023-01-01之间每个月的第一天:

import pandas as pd
from sqlalchemy import create_engine

# 生成每月第一天的日期列表,格式转为字符串
date_list = pd.date_range(start='2015-01-01', end='2023-01-01', freq='MS').strftime('%Y-%m-%d').tolist()

2. 建立数据库连接

替换为你的数据库连接字符串,不同数据库的格式示例如下:

# MySQL: 'mysql+pymysql://用户名:密码@主机地址:端口/数据库名'
# PostgreSQL: 'postgresql+psycopg2://用户名:密码@主机地址:端口/数据库名'
# SQL Server: 'mssql+pyodbc://用户名:密码@ODBC数据源名'
engine = create_engine('你的数据库连接字符串')

3. 循环执行查询并合并结果

使用参数化查询避免SQL注入,同时高效合并数据:

# 注意:如果你的列名确实是带空格的`start date`,需要根据数据库转义,比如MySQL用`start date`,SQL Server用[start date]
sql_template = "SELECT * FROM db WHERE `start date` = %s"

# 用列表存储每个查询结果,最后一次性合并更高效
df_list = []
for target_date in date_list:
    # 执行参数化查询
    current_df = pd.read_sql(sql_template, engine, params=(target_date,))
    df_list.append(current_df)

# 合并所有DataFrame
final_df = pd.concat(df_list, ignore_index=True)

4. 导出为CSV文件

# 导出时忽略索引,避免生成额外列
final_df.to_csv('合并结果.csv', index=False)

注意事项

  • 列名转义:如果你的start date列名包含空格,一定要用对应数据库的转义符包裹,否则会报错。
  • 性能优化:如果数据量较大,建议先将每个查询结果存入列表再合并,比每次追加到DataFrame效率更高。
  • 数据库驱动:确保已安装对应数据库的Python驱动,否则无法建立连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:55:15