【发布时间】:2017-01-29 02:43:34
【问题描述】:
我编写了一个脚本并在桌面“A”上运行它,该脚本以 Oracle 数据库 (10g) 和桌面“B”上的应用服务器为目标。它运行没有任何问题。
然后我将脚本复制到桌面“B”并在以下 sn-p 处吐出以下内容:“ORA-24315:非法属性类型”:
cx_dsn = cx_Oracle.makedsn(cx_hostname, cx_port, cx_SID)
cx_connection = cx_Oracle.Connection(cx_username + '/' + cx_password + '@'+ cx_dsn )
两台机器的配置如下:
- Windows 7(64 位)
- 32 位版本的 Python (ActiveState)
- pypm install cx-oracle(导致版本 cx_Oracle.clientversion() = (11, 2, 0, 3, 0) - 是的,这确实表示 v11,但它与桌面“A”中的 10g 版本有效)
但桌面“B”安装了 Oracle 10g 和 WebSphere 7 - 桌面“A”没有
我已经搜索过,很多人都遇到过这个问题或类似的问题,但总的来说,唯一建议的解决方案是:
- 确保路径在 Python 库之前不引用 Oracle 库 - 我猜这里的建议是桌面 B 上的 Oracle 安装存在干扰。所以我配置了路径,使它只引用 Python(没有提到 Oracle 等)——这没有帮助
- 确保您使用的是 32 位版本的所有内容或 64 位版本的所有内容 - 就 Python 而言,我使用了 32 位版本
- 确保 cx-Oracle 与您的目标数据库相匹配...好吧,看起来我有问题但是...奇怪的是脚本确实可以在桌面“A”上运行,所以我想它一定是桌面“B”上的环境。所以我开始安装专用的 10g 版本的 cx_Oracle。也没有成功。 (这个查询https://stackoverflow.com/questions/10456598/cx-oracle-multiple-instances-of-oracle-10-and-11-plus-oracle-home 没有得到回答,但听起来很相似)
所以我被困住了 - 有什么建议吗?
【问题讨论】:
-
确保所有变量和文字都是字节字符串而不是 unicode 字符串。可能就是这样。
-
我试过了,并确认它绝对不是 unicode 字符串问题。我在干净的 XP 机器上重复了安装,并且连接到桌面“B”没有问题,因此 cx_Oracle 必须从桌面“B”上本地安装的 Oracle db 中获取一些东西 - 当我得到解决方案时,我将发布解决方案.