将数据从oracle提取到python数据帧的速度非常慢
我正在尝试使用cx_Oracle模块从Oracle数据库提取数据并将其放入数据帧 使用fetchall()函数时,如下所示将数据从oracle提取到python数据帧的速度非常慢,python,oracle,pandas,Python,Oracle,Pandas,我正在尝试使用cx_Oracle模块从Oracle数据库提取数据并将其放入数据帧 使用fetchall()函数时,如下所示 cursor = con.cursor() cursor.arraysize = 1000 results = cursor.execute("select * from TABLE1") rows = results.fetchall() 提取速度与使用R Oracle库进行提取非常相似,约为8秒(数据大小约为750000行和30列混合数据类型) 但是当使用Pandas
cursor = con.cursor()
cursor.arraysize = 1000
results = cursor.execute("select * from TABLE1")
rows = results.fetchall()
提取速度与使用R Oracle库进行提取非常相似,约为8秒(数据大小约为750000行和30列混合数据类型)
但是当使用Pandas read_sql函数将其导入数据帧时,性能要差得多
df = pd.read_sql('select * from TABLE1',con)
使用此功能时,几乎需要30秒
我可以做些什么来优化数据帧的导入吗?试试以下方法:
df_list = []
for chunk in pd.read_sql_query(sql , conn, chunksize=10):
df_list.append(chunk)
frames=pd.concat(df_list, ignore_index=True)
还可以使用
pandas.io.sql.read\u sql
您是否尝试过使用chunksize
参数?不确定这是否有用,但值得一试。我开始对此进行调查,但从我所做的搜索来看,手动分块/循环现在似乎已经内置到pandas read\u sql函数中。我会给它一个测试,看看它是否有区别。哦,我明白了。祝你好运。是的,使用分块没有任何改善