2017-08-24 89 views
0

我試圖從Oracle提取信息到Python列表,以便將它們用作函數中的輸入。我使用下面的代碼:如何在Python中處理Oracle信息?

import cx_Oracle 
dsnRiesgos = cx_Oracle.makedsn(host="MYHOST", port ="MYPORT", sid="MYSID") 
conect = cx_Oracle.connect(user="USER",password="PASS",dsn=dsnRiesgos) 
cursor = conect.cursor() 
query = """ MY_QUERY """ 
Referencias = [] 
Referencias_Exp = [] 
cursor.execute(query) 
#The result is a view with five columns and 400,000+ rows 
for row in cursor: 
    Referencias.append(row[1]) 
    Referencias_Exp.append([row[1],row[4]]) 

我已經是從「查詢」輸出爲40萬行,它正在採取永遠完成在列表中插入的問題(我已經停止了15後分鍾)。我的直覺告訴我,有一種更有效的方式來做到這一點,但我不知道如何。

我使用Windows 7,Python 3.6.2,Oracle客戶端:instantclient-basic-windows.x64-11.2.0.4.0。

我是Python的初學者,這是我第一次將它與Oracle連接起來,所以我可能不知道「基本」概念。

回答

0

由於您似乎只需要第一列和第四列,所以我會建議您創建一個只能獲取這些列的查詢。

然後,使用fetchall()(http://cx-oracle.readthedocs.io/en/latest/cursor.html)可能會對您有所幫助。它會帶給你一個元組列表,每個元組都是你的查詢產生的行之一。

並從'how'移動到'why':爲什麼在處理它之前需要列表中的所有400k行?你不能避免這一步嗎?拋開一些小的優化,這本質上會很慢並且最好避免。