将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)

时间:2016-03-18 13:12:34

标签: python oracle macos python-3.x python-3.5

我正在尝试将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)。

首先我安装了适用于x64的Instant Client(http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html) 然后我安装cx_Oracle(https://pypi.python.org/pypi/cx_Oracle/5.2.1

对于安装cx_Oracle我设置:

export ORACLE_HOME=/Applications/oracle/instantclient_11_2
export LD_LIBRARY_PATH=$ORACLE_HOME
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export PATH=$ORACLE_HOME:$PATH

现在我收到错误:

**Unable to acquire Oracle environment handle**

我不知道为什么会这样。有什么想法吗?

我甚至创建了文件 tnsnames.ora 并将其添加到/Applications/oracle/instantclient_11_2/network/admin/tnsnames.ora

orcl=
 (description=
   (address_list=
     (address = (protocol = TCP)(host = xxx.xxx.xxx.xxx)(port = 1521))
   )
 (connect_data =
   (service_name=oratst)
 )
)

我的python代码:

import traceback
import os

os.environ["ORACLE_HOME"] = "/Applications/oracle/instantclient_11_2"
os.environ["LD_LIBRARY_PATH"] = "/Applications/oracle/instantclient_11_2"
os.environ["DYLD_LIBRARY_PATH"] = "/Applications/oracle/instantclient_11_2"
os.environ["LD_LIBRARY_PATH"] = "/Applications/oracle/instantclient_11_2"

import cx_Oracle
try:
    connection = cx_Oracle.Connection('user', 'password', cx_Oracle.makedsn('remote_ip', 1521, 'sid'))
except Exception as e:
    print(type(e))
    print(e)
    traceback.print_tb(e.__traceback__)

P.S。 cx_Oracle - 非常奇怪的模块。 它试图访问libs:

/ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1
/ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib

我从来没有这条路径,但我创建了符号链接。

1 个答案:

答案 0 :(得分:1)

按照Instant Client的实际安装说明进行操作:http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html#ic_osx_inst 并在〜/ lib中为Oracle库创建sym链接:

ln -s libclntsh.dylib.11.1 libclntsh.dylib

mkdir ~/lib

ln -s /wherever/instantclient_11_2/{libclntsh.dylib.11.1,libnnz11.dylib,libociei.dylib} ~/lib/

El Capitan打破了DYLD_LIBRARY_PATH,所以没有必要设置它:(并且没有必要设置Linux LD_LIBRARY_PATH变量。

如果要集中安装Instant Client,请参阅https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#instosx

中的5.3.1

如果您创建了tnsnames.ora文件,请将TNS_ADMIN设置为它所在的目录。不要在运行时使用Instant Client设置ORACLE_HOME(尽管您可能需要在cx_Oracle安装期间临时设置它。将其设置为您解压缩的目录Instant Client basic& sdk into,例如/ Applications / oracle / instantclient_11_2)