Ошибка памяти панд с хранимой процедурой SQL Server - PullRequest
0 голосов
/ 13 марта 2019

В настоящее время я использую приведенный ниже код для извлечения довольно большого набора данных из SQL Server в текстовый CSV-файл, который завершается с ошибкой, в зависимости от размера возвращаемых данных, с ошибкой памяти pandas.

Я читал, что, возможно, я смогу группировать заполнение кадра данных панд в куски, но я также читал, что метод read_sql_query по-прежнему загружает весь запрос в память, поэтому я не думаю, что это сработает.

Я не могу уменьшить объем данных, и мне нужно поддерживать "текст-квалификатор", но, поскольку я не делаю никаких дальнейших вычислений для набора данных, мне не нужно , чтобы использовать панд если есть лучший способ генерировать CSV.

и это мой вопрос: есть ли лучший способ выполнить потоковую передачу вывода хранимой процедуры с большим набором данных в файл CSV, при необходимости, пакетами?

мой код ниже:

import pyodbc
import pandas as pd
import csv

sql_connection_string = (f'DRIVER={{SQL Server}};'
                     f'SERVER=PATH\INSTANCE;'
                     f'DATABASE=DATABASE;'
                     f'Trusted_Connection=yes;')

sql = f'EXEC schema.stored_procedure_name @PARAM1=?, @PARAM2=?, @PARAM3=?'
params = (201812, 0, '')

with pyodbc.connect(sql_connection_string, autocommit=True) as conn:
    with conn.cursor() as cursor:
        cursor.execute(sql, params)

        if cursor.arraysize > 0:
            df = pd.DataFrame.from_records(cursor.fetchall(), columns=[x[0] for x in cursor.description])
            df.to_csv(r'destination_path', index=False, quotechar='"', quoting=csv.QUOTE_ALL)
...