我有这个小脚本试图连接到运行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
安装的。
答案 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。)。