Python 3.6:连接到Oracle 11数据库时更改服务的问题(cx_Oracle模块)

问题描述 投票:0回答:1

我在通过cx_Oracle模块更改数据库服务时遇到一些问题。

似乎第一个连接“持续存在”,即使删除对象或在子进程中创建新连接。因此,当我尝试连接到另一个服务时,会引发“ORA-01017:用户名/密码无效;登录被拒绝”

我用钱包来安排连接。

  class Connection(object):
    def __init__(self,oracle_user,instance=os.environ["ORACLESRV"],env=os.environ["ENVPURPOSE"]):
        self.oracle_user = oracle_user
        self.instance = instance
        self.env = env

        wallet_path = "$SCRIPTS/oracle/wallets/{env}/{oracle_user}".format(env=self.env.upper(),oracle_user=self.oracle_user.upper())
        os.environ["TNS_ADMIN"] = os.path.expandvars(wallet_path)
        os.environ["NLS_LANG"] = "Italian_Italy.UTF8"
        self.connection = cx_Oracle.connect("/@"+self.instance.upper())

第一个连接没有错误,但是当我尝试更改服务(即Connection类的“instance”参数)时,连接被拒绝。参数被正确传递给构造函数,但它就像脚本一直看到第一个钱包,显然包含另一个服务的user / pwd。

我怎样才能克服这种“持久性”?

python-3.x cx-oracle
1个回答
0
投票

Oracle只读取一次环境变量 - 包括TNS_ADMIN和NLS_LANG之类的环境变量。建立连接后,不再查询环境变量。这可能是您所看到的“持久性”的根源。您需要确保在建立连接之前已经定义了环境变量,并且这些变量适用于您打算进行的所有连接;否则,您将需要使用某种子进程(但不使用fork创建)。

© www.soinside.com 2019 - 2024. All rights reserved.