Есть ли модуль Pyhon для чтения из Oracle и Split в несколько файлов Excel с меньшим использованием памяти в зависимости от столбца? - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь разбить таблицу оракулов на основе значений в столбце (названия больниц).Набор данных составляет ~ 3 млн строк в 66 столбцах.Я пытаюсь записать данные для 1 больницы из 3 разных таблиц в 1 книгу Excel на 3 разных листах.

У меня есть работающий код, который работал для ~ 700К строк, но новый набор слишком велик, и я столкнулся с проблемами с памятью.Я пытался изменить свой код, чтобы каждый раз попадать в базу данных для имени больницы, используя цикл for.Но я получаю xlsx ошибку закрытия его явно.

import cx_Oracle
import getpass
import xlsxwriter
import pandas as pd

path = "C:\HN\1"

p = getpass.getpass()

# Connecting to Oracle
myusername = 'CN138609'

dsn_tns = cx_Oracle.makedsn('oflc1exa03p-vip.centene.com', '1521', service_name='IGX_APP_P')

conn = cx_Oracle.connect(user=myusername, password=p, dsn=dsn_tns)

sql_4 = "select distinct hospital_name from HN_Hosp_Records"


df4 = pd.read_sql(sql_4,conn)



hospital_name = list(df4['HOSPITAL_NAME'])

for x in hospital_name:
    hosp_name = {"hosp" : x}
    sql_1 = "select * from HN_Hosp_Records where hospital_name = :hosp"
    sql_2 = "select * from HN_CAP_Claims_Not_In_DHCS where hospital_name = :hosp"
    sql_3 = "select * from HN_Denied_Claims where hospital_name = :hosp"

    df1 = pd.read_sql(sql_1,conn,params=hosp_name)
    df2 = pd.read_sql(sql_2,conn,params=hosp_name)
    df3 = pd.read_sql(sql_3,conn,params=hosp_name)

    df_dhcs = df1.loc[df1['HOSPITAL_NAME'] == x]
    df_dw = df2.loc[df2['HOSPITAL_NAME'] == x]
    df_denied = df3.loc[df3['HOSPITAL_NAME'] == x]
    # Create a new excel workbook
    writer = pd.ExcelWriter(path + x + "_HNT_P2_REC_05062019.xlsx", engine='xlsxwriter')
    # Write each dataframe to a different worksheet.
    df_dhcs.to_excel(writer, sheet_name="DHCS")
    df_dw.to_excel(writer, sheet_name = "Not In DHCS")
    df_denied.to_excel(writer, sheet_name = "Denied")
    writer.close()

Вот предупреждение / ошибка, которую я получаю.Код не останавливается, но файл не выводится:

Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ xlsxwriter \ workbook.py", строка 153, в del повысить Исключение («Исключение, обнаруженное в деструкторе рабочей книги.» Исключение: Исключение, обнаруженное в деструкторе рабочей книги. Для рабочей книги может потребоваться явное close ().

1 Ответ

0 голосов
/ 08 мая 2019

Я решил это. вместо привязки переменной было использование% s.

...