python cx_oracle和服务器信息

python cx_oracle和服务器信息,python,cx-oracle,Python,Cx Oracle,为了演示Oracle的安全功能,必须在尚未建立用户会话时调用OCIServerVersion()或OCIServerRelease() 当数据库参数sec\u return\u server\u release\u banner=false时。 我正在为此使用Python cx_Oracle模块,但我不确定在建立连接之前如何获取服务器版本。有什么想法吗?取决于您的软件体系结构和跨平台准备的意图 cx_Oracle依赖于Oracle客户端。所以,您确定在已知路径上存在Oracle客户端。即使您不想

为了演示Oracle的安全功能,必须在尚未建立用户会话时调用OCIServerVersion()OCIServerRelease()

当数据库参数
sec\u return\u server\u release\u banner=false时

我正在为此使用Python cx_Oracle模块,但我不确定在建立连接之前如何获取服务器版本。有什么想法吗?

取决于您的软件体系结构和跨平台准备的意图

cx_Oracle依赖于Oracle客户端。所以,您确定在已知路径上存在Oracle客户端。即使您不想将Oracle客户端用于常规会话,也可以将其用于服务器的初步检查

在linux/unix上,可以在子进程中运行以下代码:

sqlplus user/pasword@INSTANCE <<< "quit"| grep "Oracle Database"| head -n 1 

sqlplus用户/pasword@INSTANCE不建立连接,。不,你什么都不能问。这就像进入谷歌页面一样。(互联网架构——无论你称之为无会话还是基于会话)

至于Authentical,如果未设置权限,Oracle将使用用户名“nobody”作为用户,从而为每个用户提供一个会话

我是Oracle APEX的用户,我经常使用Python、PLSQL


这是一个很好的问题。谢谢。

cxOracle不使用OCI函数获取版本,但在连接后调用dbms_utility.db_version,因此我认为如果没有对dbms_utility.db_version过程具有执行权限的用户,您就不能这样做。您可以尝试通过使用ctypes直接使用OCI客户端来绕过cxOracle(pypy上的cxOracle使用ctypes)connect函数是Connection\u connect in Connection.c它调用OCIServerAttach(),但在身份验证之前无法调用其他函数它是rpython您应该在serverattach之后调用OCIServerVersion(),但我不知道移植到cpython+ctypesAm有多容易不确定您的用例,但是你试过使用zxJDBC吗?'from com.ziclix.python.sql import zxJDBC'@jhon.smith:你还在寻找答案吗?如果上述其他建议没有帮助,那么将此功能添加到cx_Oracle并不困难。如果您仍然需要此功能,我相信我们可以帮助您添加此功能。Oracle Instantclient(它只提供OCI,因此本身就足以支持cxOracle)默认情况下不随sqlplus提供。