Python无法连接到Oracle数据库,不支持close_fds

时间:2015-10-14 11:41:42

标签: python oracle jpype jaydebeapi

我有这个小脚本试图连接到运行oracle数据库的服务器(11g)。

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数据库的小教程。他们的代码看起来基本相同。

通过寻找解决方案,我发现python应该支持2.6.x版本的close_fds

我不知道从哪里开始寻找。

有关jpype和jaydebaapi的更多信息:

JayDeBeApi3 (1.3)
JPype1-py3 (0.5.5.2)

两者都是通过pip安装的。

1 个答案:

答案 0 :(得分:1)

我建议使用python&gt; = 2.7.x(在你的情况下很好,因为你使用的是更高版本)。 使用JayDeBeApi 0.2.0推荐的JPype1 0.5.7,这是最新版本。 此外,由于您自己启动JVM,因此无需在connect语句中指定第3个参数(驱动程序)。或者您可以注释掉startjvm并保持connect语句不变。 Jpype做同样的事情(例如,如果在connect语句中将驱动程序jar指定为第3个参数,则为startjv。)。