python-3.x - 是否有一个 Pyhon 模块可以从 Oracle 读取并拆分为多个基于列的内存使用量较少的 excel 文件?
问题描述
我正在尝试根据列(医院名称)中的值拆分 oracle 表。数据集是 66 列中的约 3 百万行。我正在尝试将 1 家医院的数据从 3 个不同的表格写入 3 个不同工作表中的 1 个 Excel 工作簿。
我有一个运行代码可用于约 700K 行,但新集合太大,我遇到了内存问题。我尝试修改我的代码以每次使用 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 raise Exception(“工作簿析构函数中捕获的异常。”异常:工作簿析构函数中捕获的异常。显式关闭()工作簿可能需要。
解决方案
我解决了。而不是使用 %s 绑定变量是诀窍。
推荐阅读
- c# - Avalonia 按钮单击事件不起作用
- assembly - 使用 IA32 或 x86 访问 C 中的联合
- python-3.x - 使用不是从非零索引开始的python遍历文件的行
- c - 在 C 中考虑 3 个参数对链表进行排序的通用方法
- mysql - phpmyAdmin & SQL 错误 INSERT INTO 命令
- html - 浏览器缩放期间的 CSS sprite vs Image
- c# - 如何获取在.netcore web api(IFromFile)中选择的路径文件
- javascript - 使用 execCommand 设置 UnorderedList 的前景色
- flutter - Flutter:无法导航到另一个页面
- c - 即使我不尝试修改字符串,为什么还要在 C 中修改字符串?