首页 > 解决方案 > Python 作为自动调度 SQL 查询和将结果导出到 csv 文件的 SSIS 替代方案

问题描述

当无法部署 SSIS 包时,将 Python 用作 ETL 工具的最佳方法是什么?有 8 个相当复杂的 SQL 查询需要每天执行,并将其输出保存为 csv 文件到特定文件夹。

我在这里找到了几个可能的解决方案:

  1. 自动调度要导出到 csv 文件的 SQL 查询结果

  2. 如何自动将 sql 查询结果保存到 .csv 文件

  3. 通过 SQL Server pyodbc 连接连接到链接服务器?

前 2 个解决方案需要 SSIS 包、SQL 代理作业或 bcp 实用程序。理想情况下,我想像第三个选项一样继续使用 Python,因为这将允许我将 ETL 代码集成到我当前的工作流程中。这也可以让我更多地了解 Python 的 ETL 功能。

现在,我每天执行 8 个 .sql 文件,我想继续使用 PyODBC 建立与 SQL 数据库及其表的连接。每个查询大约有 300 行代码,它从数据库以及链接服务器上的数据库中选择数据。

这是我迄今为止在 Python 中所拥有的:

import pyodbc
import pandas as pd
import os
import sys

# Establish connection to the SQL database and appropriate  table
conn = pyodbc.connect('Driver={'+driver+'};'
                      'Server='+server+';'
                      'Database='+database+';'
                      'Trusted_Connection=yes;')

path = 'C:\\User\\Me\\path\\'

# Define the query you'd like to execute:
query = open(path + 'Dynamic Query - Import Data 02_27_20.sql', 'r')

# For some reason this line of code times out and gives me an error message
df = pd.read_sql_query(query.read(), conn)

df.to_csv(output_folder + filename, index = False)

我在这里遇到的错误是当我尝试将 .sql 文件执行到 Python 中时。运行这行代码后,执行超时并收到以下错误:“TypeError: 'NoneType' object is not iterable。”

如果我能够在 Python 中执行查询并将其结果保存为数据框,那么我可以继续将此数据框作为 csv 文件导出到我想要的位置。

任何帮助将不胜感激。谢谢!

标签: pythonsql-serverpandasssispyodbc

解决方案


推荐阅读