如何用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
相关产品推荐
相关产品推荐

