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

如何用Python批量执行文件夹中SQL文件并导出结果至独立Excel

循环批量执行SQL并导出Excel

以下是修改后的代码,可以自动遍历config文件夹下所有SQL文件,逐个执行并导出对应Excel文件:

import datetime
import cx_Oracle
import pandas as pd
import os
from glob import glob

# CONFIG
DATE = datetime.datetime.now().strftime("%Y-%m-%d_%I-%M-%p")
CONFIG = './config'
DATA = './data'
TODAY = f'{DATA}/{DATE}'

# 创建当日输出目录,不存在则自动创建
os.makedirs(TODAY, exist_ok=True)

# Server Config
SQLSERVER = cx_Oracle.makedsn('xxx.xxx.xxx.xxx', '1521', service_name='SERVER')
conn = cx_Oracle.connect(user='xxxxx', password='xxxxxx', dsn=SQLSERVER)

# 遍历config文件夹下所有.sql文件
for sql_file in glob(f'{CONFIG}/*.sql'):
    # 提取文件名(不含后缀)作为Excel文件名
    file_name = os.path.splitext(os.path.basename(sql_file))[0]
    excel_path = f'{TODAY}/{file_name}.xlsx'
    
    try:
        # 读取SQL文件内容
        with open(sql_file, 'r') as fd:
            query = fd.read()
        
        # 执行SQL查询(分块读取大结果集)
        dfs = []
        for chunk in pd.read_sql_query(query, con=conn):
            dfs.append(chunk)
        df = pd.concat(dfs)
        
        # 写入Excel
        df.to_excel(excel_path, engine='xlsxwriter', index=False)
        print(f'成功导出:{excel_path}')
    
    except Exception as e:
        print(f'处理文件{sql_file}出错:{str(e)}')
        continue

# 关闭数据库连接
conn.close()

关键修改点说明

  • 批量获取SQL文件:用glob.glob(f'{CONFIG}/*.sql')自动筛选出所有后缀为.sql的文件,无需手动指定文件名,新增文件会自动纳入处理
  • 自动创建输出目录:通过os.makedirs(TODAY, exist_ok=True)确保当日输出目录存在,避免因目录不存在导致导出失败
  • 文件名对应:从SQL文件名提取前缀(如2.sql对应2.xlsx),保持查询和结果文件的对应关系
  • 异常处理:加入try-except块,单个SQL执行出错时会跳过并打印错误信息,不会中断整个批量处理流程
  • 资源优化:用with open语句读取文件,自动关闭文件句柄;最后统一关闭数据库连接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:30:20