1 安裝cx_Oracle, 這個是一個Python的擴展包,用來訪問Oracle數據庫的。Windows的安裝文件可以到http://cx-oracle.sourceforge.net/這裏去下載。
2 下載Oracle客戶端(Oracle Instant Client),這個是Python擴展包所需要的。可以到http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html去下載。下載後解壓到本地磁盤(例如:D:\oracle\instantclient_11_2),把它加入到環境變量的path中。
下載basic版本
3. 測試
import cx_Oracle
db_conn = cx_Oracle.connect('usr/pwd@ip:1521/service_name')
cursor = db_conn.cursor()
cursor.execute('select * from test')
print cursor.fetchone()
print 'total num: %d'%cursor.rowcount
results = cursor.fetchall()
print 'total num: %d'%cursor.rowcount
for row in results:
print row
cursor.close()
db_conn.close()
4. fetch()速度慢
嘗試用變量綁定的方式查詢,但是一個語句(cursor.execute + cursor.fetchone)需要44s,後來發現在變量綁定之前,先用encode('gbk')轉換一下,速度不到10ms,
注意不要在cursor.execute()裏做encode()
測試時使用的變量值來自pandas,不知道是否和其有關
另外,上述修改雖然會使速度正常,但是查詢結果未必正確,需要加入以下幾句
import os
os.environ['NLS_LANG'] = 'AMERICAN_CHINA.ZHS16GBK'
import cx_Oracle
其中的'AMERICAN_CHINA.ZHS16GBK' 可以在oracle中用
select * from nls_database_parameters
查詢,似乎是關係到服務器和客戶端的編碼轉換