python - Python 作为自动调度 SQL 查询和将结果导出到 csv 文件的 SSIS 替代方案
问题描述
当无法部署 SSIS 包时,将 Python 用作 ETL 工具的最佳方法是什么?有 8 个相当复杂的 SQL 查询需要每天执行,并将其输出保存为 csv 文件到特定文件夹。
我在这里找到了几个可能的解决方案:
前 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 文件导出到我想要的位置。
任何帮助将不胜感激。谢谢!
解决方案
推荐阅读
- android - 如何使用参数中的对象列表发出 POST 改造请求?
- amazon-web-services - AWS Cloudfront 返回 403 但 S3 返回 200
- php - Woocommerce 变化下拉选项标签添加一些数据集
- c++ - 如果 exe 在 cygwin 或 cmd 中运行,如何在 C++ 中检测
- php - 有没有办法在 sql 查询中返回多个不相关的结果?
- javascript - 在服务器端框架应用程序中嵌入 vue 应用程序。Vue 公共路径失败
- javascript - react-native 没有从外部可见的烧瓶服务器获取内容 - 开发中的“网络请求失败”
- ssl - 如何使 SSL 与 1and1 和 heroku 一起工作
- .net-core - .net 核心中的沙盒
- python - 带有一次性变量的“With”语句?