如何将多段SQL查询结果分别导出至指定路径的CSV文件?
批量处理多段SQL查询并导出CSV的解决方案
直接把查询语句与对应输出文件名配对,通过循环批量处理即可,这样既简洁又方便后续扩展更多查询。修改后的代码如下:
import pandas as pd import os # 定义查询语句与对应输出文件名的配对列表 query_file_pairs = [ ( """ SELECT * FROM [TN_TN].[table1] """, "table1.csv" ), ( """ SELECT * FROM [TN_TN].[table2] """, "table2.csv" ) ] save_path = 'O:/Bonus/test' # 循环处理每一组查询和文件 for query, file_name in query_file_pairs: # 执行SQL查询 data = pd.read_sql(query, cnxn) # 直接用pandas的to_csv写入文件,省去手动操作文件流的步骤 full_path = os.path.join(save_path, file_name) data.to_csv(full_path, sep=';', index=False)
关键改动说明:
- 复用逻辑:把查询语句和目标文件名打包成列表,通过循环批量执行重复逻辑,避免冗余代码。
- 简化文件操作:直接使用
pandas.DataFrame.to_csv()写入文件,不需要先把CSV转成字符串再手动写入,代码更简洁且不易出错(自动处理文件关闭)。 - 扩展性强:后续要新增查询时,只需在
query_file_pairs列表里添加新的元组即可,无需修改循环逻辑。
如果需要保留原代码中手动操作文件的写法,也可以把文件写入部分封装成函数,再循环调用:
import pandas as pd import os def export_query_to_csv(query, file_name, save_path, cnxn): data = pd.read_sql(query, cnxn) cs = data.to_csv(sep=';', index=False) completeName = os.path.join(save_path, file_name) with open(completeName, "w") as file1: file1.write(cs) # 定义查询与文件配对 query_file_pairs = [ ("""SELECT * FROM [TN_TN].[table1]""", "table1.csv"), ("""SELECT * FROM [TN_TN].[table2]""", "table2.csv") ] save_path = 'O:/Bonus/test' # 循环导出 for query, file_name in query_file_pairs: export_query_to_csv(query, file_name, save_path, cnxn)
这里用with语句替代手动close(),能确保文件正确关闭,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Aparna Prasad
相关产品推荐
相关产品推荐

