python and oracle


參考源


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

    查詢,似乎是關係到服務器和客戶端的編碼轉換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章