Python как SSIS Альтернатива автоматическому планированию SQL Запросы и экспорт результатов в CSV-файл - PullRequest
0 голосов
/ 01 апреля 2020

Как лучше всего использовать Python в качестве инструмента ETL, когда пакет служб SSIS не может быть развернут? Есть 8 SQL запросов, которые являются довольно сложными, которые нужно выполнять ежедневно, и их результаты сохраняются в виде csv-файлов в определенной папке c.

Я нашел пару возможных решений здесь:

  1. Автоматическое планирование SQL результатов запроса для экспорта в файл CSV

  2. Как автоматически сохранить sql результаты запроса в файл .csv

  3. Подключение к связанному серверу через SQL Сервер pyodb c подключение?

Первые 2 решения требуют либо пакета служб SSIS, SQL Agent Job, либо утилиты bcp. В идеале я хотел бы перейти к Python, как в третьем варианте, поскольку это позволило бы мне интегрировать код ETL в мой текущий рабочий процесс. Это также позволило бы мне больше узнать о возможностях ETL Python.

Прямо сейчас у меня есть 8. sql файлов, которые я выполняю каждый день, и я хотел бы перейти к PyODB C установить sh соединение с базой данных 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 »не повторяется».

Если я могу выполнить запрос в Python и сохраняя результаты в виде фрейма данных, я могу затем экспортировать этот фрейм данных в виде CSV-файла в нужное место.

Любая помощь будет принята с благодарностью. Спасибо!

...