2016-02-19 214 views
-1

使用Python 3.4連接到Oracle 11(64位),但無論如何我都無法獲得連接。我試過cx_Oracle軟件包和pyodbc軟件包都沒有成功。連接到Oracle的Python問題(cx_Oracle和Pyodbc)

試圖與cx_Oracle

conn = cx_Oracle.connect('username/[email protected]') 

 oradsn = cx_Oracle.makedsn(host, port, server) 
     conn = cx_Oracle.connect(user="username, password=password, dsn=oradsn") 

錯誤:無法獲取Oracle環境處理


試圖與pyodbc

conn = pypyodbc.connect('DRIVER={ORACLE ODBC DRIVER};DBQ=dsn name;UID=username;PWD=password') 

conn = pyodbc.connect('DSN=dsn;SERVER=server;UID=username;PWD=password') 

錯誤:指定的驅動程序無法加載由於系統錯誤1114:一個動態鏈接庫(DDL)初始化例程失敗。 (< ---- sqora32.dll在那個位置,我已經檢查)


環境變量:

ORACLE_HOME = C:\Oracle\Ora11_x64 

有什麼建議?

謝謝

回答

0

我的問題最終被pyinstaller與Cx_oracle一起使用。我從我的python腳本創建一個單一的可執行文件,事實證明pyinstaller包含一個OCI.dll文件。一旦我改變了Pyinstaller刪除該文件,其他系統上的所有連接都與可執行文件完全相同。

點擊此處瞭解詳情:https://mail.python.org/pipermail/tutor/2014-December/103608.html

^^在上面的例子中他將.dll文件,但我發現我的通過刪除OCI工作。dll文件,並忽視另一種他是在談論

以及怎樣改變pyinstaller:https://pythonhosted.org/PyInstaller/#using-spec-files

0

首先,在Windows上,不要使用環境變量ORACLE_HOME。這應該只在Linux/Unix平臺上使用。你應該改用PATH環境變量。

其次,利用SQL * Plus確認您能夠連接到數據庫。有相當多的討論如何做到這一點的網頁。這裏是一個:

http://penguinman-techtalk.blogspot.ca/2009/02/sqlplus-connection-to-remote-oracle.html

最後,如果你想makedsn你需要做以下使用:

dsn = cx_Oracle.makedsn(host, port, server) 
conn = cx_Oracle.connect(user, pwd, dsn) 

如果你只是想連接到由當地TNSNAMES引用數據庫.ORA文件(稱爲tnsentry),你可以做到以下幾點:

conn = cx_Oracle.connect(user, pwd, tnsentry) 

OR

conn = cx_Oracle.connect("user/[email protected]") 
+0

謝謝回答!幾個問題: 1. PATH變量應該是什麼樣子? 2.我無法通過SQL Plus連接(TNS適配器錯誤(?))。但是,我可以通過Oracle SQL Developer進行連接。不知道這是什麼意思。 –

+0

PATH環境變量應包含SQL * Plus可執行文件和客戶端庫的位置。 SQL Developer使用Java,而SQL * Plus(和cx_Oracle)使用OCI,因此它們使用不同的方法進行連接。 TNS適配器錯誤只是意味着你的連接字符串錯誤。如果您提供了連接方式的詳細信息,可能會幫助我進一步提供幫助。 :-) –

+0

好吧,我改變了我的連接字符串,並能夠連接到SQLPlus!好消息。但我仍然得到'無法獲取Oracle環境句柄錯誤。我的PATH變量在字符串中有'C:\ Oracle \ Ora11_x64 \ BIN'。我應該提到,tnsnames.ora文件不包含我的連接,並且我沒有訪問權限來更改該文件。我仍然可以使用Cx_oracle進行連接嗎? –