2009-11-25 34 views
3

我希望能夠通過python連接到Oracle 10.1.0.2.0(它安裝在不同的機器上)。python和Oracle

我的配置文件運行在安裝了Python 2.6的Ubuntu 9.04 Jaunty上。

我已經下載並解壓縮instantclient-basic-linux32-10.1.0.5-20060511.zip,設置LD_LIBRARY_PATHORACLE_HOME指向解壓縮它的目錄。 然後我下載cx_Oracle-5.0.2-10g-py26-1.i386.rpm並安裝它:

$sudo alien -i cx_Oracle-5.0.2-10g-py26-1.i386.rpm 

當我運行

$python -c 'import cx_Oracle' 

我得到:

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
ImportError: /usr/lib/python2.6/cx_Oracle.so: undefined symbol: OCIClientVersion 

幫助將是非常讚賞。

+1

是否安裝了Oracle?當你運行SQLPlus時,會發生什麼? – 2009-11-25 11:42:32

回答

4

我相信OCIClientVersion需要Oracle 10g第2版,但你使用版本1

它看起來像cx_Oracle二進制您下載已與-DORACLE_10GR2這使得包括調用OCIClientVersion編譯。由於這是一個編譯時,唯一的選擇有真正應該爲10g和10gR2中下載分開,但它似乎不會有:

This module has been built with Oracle 9.2.0, 10.2.0, 11.1.0 on Linux 

所以,你可能必須下載cx_Oracle源和自己構建這些。 (因此,您需要Python和Oracle客戶端標頭。)

或者,您可以改爲使用Oracle 9i的cx_Oracle版本。這聽起來有點狡猾,但顯然應該工作。

+0

同意 - 我期望cx_Oracle的Oracle 9i版本能夠在任何10g數據庫中都能很好地工作。 – 2009-11-26 04:17:01

+0

感謝您的回答。 我試圖構建cx_Oracle 5.0.2,但收到錯誤 Connection.c:36:錯誤: 'OCI_ATTR_CURRENT_SCHEMA' 未申報這裏 在Connection.c的一段代碼看起來像這樣 ... 的#ifdef ORACLE_10G ... static ub4 gc_ClientInfoAttribute = OCI_ATTR_CLIENT_INFO; static ub4 gc_CurrentSchemaAttribute = OCI_ATTR_CURRENT_SCHEMA; #endif ... 嘗試在Oracle InstantClient SDK目錄中搜索,但根本找不到OCI_ATTR_CURRENT_SCHEMA。 關於另一種方式,我無法找到Oracle 9i InstantClient進行下載。 – todoer 2009-11-26 09:34:23

+0

呃。 'OCI_ATTR_CURRENT_SCHEMA'也是10gR2特有的。所以我想cx_Oracle並不是真正爲10gR1設計的。你可以嘗試從Connection.c中刪除引用'OCI_ATTR_CURRENT_SCHEMA'的行和後面的'current_schema',這似乎是引用它的唯一東西,但可能還有其他問題。看起來像9x的cx_Oracle確實是你最好的選擇。我看到一些人提到9i cx_Oracle應該和10g instant_client一起工作,如果你找不到9i的話...... Jeffrey,這是否準確? – bobince 2009-11-26 10:22:12

2

感謝bobince的回答,我會盡量總結可能的解決方案,以使其他人可讀性更高。

LD_LIBRARY_PATHORACLE_HOME都需要指向Oracle InstantClient解壓縮的目錄。

  • 您可以Oracle InstantClient 10.1

一起使用cx_Oracle 4.4.1 for Oracle 9i安裝cx_Oracle 4.4.1

sudo alien -i cx_Oracle-4.4.1-9i-py26-1.i386.rpm 

後cx_Oracle.so被放置在/usr/local/lib/python2.6/site因此需要創建以下符號鏈接

sudo ln -s /usr/local/lib/python2.6/site-packages/cx_Oracle.so /usr/lib/python2.6 

此外,由於使用的是cx_Oracle爲Oracle 9i,你需要在InstantClient目錄

sudo ln -s libclntsh.so.10.1 libclntsh.so.9.0 
  • 創建符號鏈接,或者您可以使用cx_Oracle 5.0.2 for Oracle 10gOracle InstantClient 10.2

安裝過程類似。

sudo alien -i cx_Oracle-5.0.2-10g-py26-1.i386.rpm 
sudo ln -s /usr/lib/python2.6/site-packages/cx_Oracle.so /usr/lib/python2.6 
  • 大廈cx_Oracle10克源和Oracle InstantClient工作10.1是不是因爲cx_Oracle10克的選項使用特定的代碼到Oracle 10g第2版

注:這是很難預測這些解決方案是否工作沒有任何缺陷(需要進一步測試)。