首页 > 解决方案 > 从oracle表中读取大量数据并提取到数据框中的最佳方法是什么

问题描述

我将从我的 oracle 数据库中的表中读取数据并在 python 的数据框中获取它。该表有 2200 万条记录,使用 fetchall() 需要很长时间而没有任何结果。(查询在 oracle 中运行 1 秒)

我曾尝试使用以下代码对数据进行切片,但仍然效率不高。

import cx_Oracle
import pandas as pd
from pandas import DataFrame
connect_serv = cx_Oracle.connect(user='', password='', dsn='')
cur = connect_serv.cursor()  

table_row_count=22242387;
batch_size=100000;

sql="""select t.* from (select a.*,ROW_NUMBER() OVER (ORDER BY column1 ) as row_num  from  table1 a) T where t.row_num between :LOWER_BOUND and :UPPER_BOUND"""

data=[]
for lower_bound in range (0,table_row_count,batch_size):
    cur.execute(sql,{'LOWER_BOUND':lower_bound,
                     'UPPER_BOUND':lower_bound + batch_size - 1})
    for row in cur.fetchall():
        data.append(row)

我想知道在合理的时间内在 python 中获取这么多数据的正确解决方案是什么。

标签: pythoncx-oraclefetchall

解决方案


您将不得不调整 arraysize 和 prefetchrow 参数。我遇到了同样的问题。增加数组大小解决了这个问题。根据您拥有的内存选择值。

链接: https ://cx-oracle.readthedocs.io/en/latest/user_guide/tuning.html?highlight=arraysize#choosing-values-for-arraysize-and-prefetchrows


推荐阅读