2015-10-14 20 views
0

我有這個嘗試連接到運行Oracle數據庫(11g)的服務器的小腳本。Python無法連接到Oracle數據庫,不支持close_fds

import os 
import sys 
import jpype 
import jaydebeapi 

if("JAVA_HOME" not in os.environ): 
    os.environ["JAVA_HOME"] = "c:\Program Files\Java\jdk1.8.0_45" 

ODBC_DRIVER = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ojdbc6.jar") 

print("\tPYTHON VERSION", sys.version) 
print("\tJAVA_HOME", os.environ["JAVA_HOME"]) 
print("\tDEFAULT JVM PATH", jpype.getDefaultJVMPath()) 
print("\tODBC_DRIVER", ODBC_DRIVER) 

try: 
    jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path={}".format(ODBC_DRIVER)) 
    conn = jaydebeapi.connect("oracle.jdbc.driver.OracleDriver", 
          ["jdbc:oracle:thin//192.168.10.33:1521", "<user>", "<passw>"], 
           ODBC_DRIVER) 
except Exception as e: 
    print(e) 
    sys.exit(-1) 

sys.exit(0) 

與拋出的異常輸出:

PYTHON VERSION 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)] 
    JAVA_HOME c:\Program Files\Java\jdk1.8.0_45 
    DEFAULT JVM PATH c:\Program Files\Java\jdk1.8.0_45\jre\bin\server\jvm.dll 
    ODBC_DRIVER d:\path\to\ojdbc6.jar 

close_fds is not supported on Windows platforms if you redirect stdin/stdout/stderr 

正如我主要用於其連接到oracle數據庫小教程的參考。他們的代碼基本上是一樣的。

通過查找我發現蟒蛇應該從版本2.6.x的

支持close_fds的解決方案我不知道從哪裏開始尋找。在jpype和jaydebaapi

的更多信息:

JayDeBeApi3 (1.3) 
JPype1-py3 (0.5.5.2) 

無論是通過pip安裝。

+0

爲什麼不使用更新版本的[JPype1](https://pypi.python.org/pypi/JPype1/)和[JayDeBeApi](https://pypi.python.org/pypi/JayDeBeApi /)? – bastian

回答

1

我會推薦使用python> = 2.7.x(這對你的情況很好,因爲你使用的是更高版本)。 按照JayDeBeApi 0.2.0(最新版本)推薦使用JPype1 0.5.7。 另外,由於您自己啓動了JVM,因此不需要在connect語句中指定第三個參數(驅動程序)。或者,您可以註釋掉startjvm並保持connect語句不變。 Jpype也是這樣做的(即,如果在連接語句中將驅動程序jar指定爲第三個參數,則爲startjvm)。

+0

感謝您的回答。與此同時,我從Windows切換到Linux來解決這個問題。主要問題是,我無法構建最新版本的JPype和Jaydebeapi,因此使用稍舊的版本。在帶有最新軟件包的Linux上,這個問題不再適用。 – ap0