python3安装cx_Oracle

快速入门cx_Oracle安装

  • 如果尚未安装,请安装Python 3。在macOS上,您必须始终安装自己的Python。

    cx_Oracle 8支持Python 3.5和更高版本。如果使用Python 2,则将安装较旧的cx_Oracle 7.3。

  • 通过以下方式PyPI安装cx_Oracle 

    python -m pip install cx_Oracle --upgrade
    

    注意:如果您的平台不提供二进制车轮软件包,则将下载源软件包。这将被编译并安装生成的二进制文件。

    --user如果您无权写入系统目录,则选项可能很有用:

    python -m pip install cx_Oracle --upgrade --user
    

    如果您在代理后面,则将代理服务器添加到命令中,例如add --proxy=http://proxy.example.com:80

  • 将Oracle 19、18、12或11.2客户端库添加到操作系统库搜索路径,例如PATHWindows或LD_LIBRARY_PATHLinux。init_oracle_client()在您的应用程序中使用macOS传递Oracle客户端目录名称时,请参阅查找Oracle客户端库在Windows上也可以使用。

    获取库:

    • 如果数据库位于远程计算机上,则从免费的Oracle Instant Client “ Basic”或“ Basic Light”软件包中下载并解压缩客户端库,以用于您的操作系统体系结构。

      Windows上的Instant Client需要适当的Microsoft Windows Redistributable,请参阅在Windows上安装cx_Oracle在Linux上,需要libaio (有时称为libaio1)软件包。Oracle Linux 8也需要该libnsl软件包。

    • 或者,使用本地安装的数据库中已有的客户端库,例如免费的Oracle Database Express Edition(“ XE”) 版本。

    版本19、18和12.2客户端库可以连接到Oracle Database 11.2或更高版本。12.1版客户端库可以连接到Oracle Database 10.2或更高版本。11.2版客户端库可以连接到Oracle Database 9.2或更高版本。

  • 创建一个类似于以下脚本的脚本:

    # myscript.py
    
    import cx_Oracle
    
    # Connect as user "hr" with password "welcome" to the "orclpdb1" service running on this computer.
    connection = cx_Oracle.connect("hr", "welcome", "localhost/orclpdb1")
    
    cursor = connection.cursor()
    cursor.execute("""
            SELECT first_name, last_name
            FROM employees
            WHERE department_id = :did AND employee_id > :eid""",
            did = 50,
            eid = 190)
    for fname, lname in cursor:
        print("Values:", fname, lname)
    

    找到您的Oracle数据库用户名和密码,以及数据库连接字符串。连接字符串通常采用以下格式 hostname/servicename:使用运行数据库的主机名和使用Oracle数据库实例的服务名。

    将您的用户名,密码和连接字符串替换为代码。运行Python脚本,例如:

    python myscript.py
    

您可以从API文档 和示例中学习如何使用cx_Oracle 

如果您遇到安装问题,请查看“故障排除”部分

Oracle客户端和Oracle数据库的互操作性

cx_Oracle需要Oracle客户端库。这些库提供了访问Oracle数据库实例所需的网络连接。它们还为cx_Oracle提供基本和高级的连接管理和数据功能。

获取Oracle客户端库的最简单方法是安装免费的 Oracle Instant Client “基本”或“基本轻”软件包。这些库也可以在任何Oracle数据库安装或完整的Oracle Client安装中使用。

Oracle的标准客户端-服务器网络互操作性允许在不同版本的Oracle客户端库和Oracle数据库之间建立连接。有关认证的配置,请参见Oracle支持的 Doc ID 207303.1总之,Oracle Client 19、18和12.2可以连接到Oracle Database 11.2或更高版本。Oracle Client 12.1可以连接到Oracle Database 10.2或更高版本。Oracle Client 11.2可以连接到Oracle Database 9.2或更高版本。创建连接的技术限制可能更加灵活。例如,Oracle Client 12.2可以成功连接到Oracle Database 10.2。

cx_Oracle使用每个受支持平台上可用的共享库加载机制在运行时加载Oracle Client库。无需为不同版本的库重建它。由于单个cx_Oracle二进制文件可以使用不同的客户端版本,并且还可以访问多个数据库版本,因此在预期的发行环境中对应用程序进行测试非常重要。较新的Oracle客户端支持新功能,例如12.1或更高版本的客户端可用oraaccess.xml外部配置文件,会话池改进,改进的高可用性功能,呼叫超时和其他增强功能

cx_Oracle函数clientversion()可用于确定使用哪个Oracle Client版本,该属性 Connection.version可用于确定连接正在访问哪个Oracle数据库版本。然后可以使用它们来相应地调整应用程序行为。尝试使用某些特定的客户机/服务器组合不支持的Oracle功能可能会导致运行时错误。这些包括:

  • 尝试访问当前Oracle客户端库不支持的属性时,将收到错误消息“ ORA-24315:非法属性类型”
  • 尝试将针对Oracle Database 12c的Oracle Client 11.2使用隐式结果时,会出现错误“ ORA-29481:隐式结果无法返回给客户端”
  • 尝试使用Oracle Client 11.2获取数组DML行计数时,您将收到错误“ DPI-1050:Oracle Client库必须为12.1版或更高版本”

在Linux上安装cx_Oracle

本节讨论Linux上的常规安装方法。要在Oracle Linux上使用yum的Python和cx_Oracle RPM软件包,请参阅在Oracle Linux上安装cx_Oracle RPM

安装cx_Oracle

在Linux上安装cx_Oracle的通用方法是使用Python的Pip软件包从PyPI安装cx_Oracle 

python -m pip install cx_Oracle --upgrade

--user如果您无权写入系统目录,则选项可能很有用:

python -m pip install cx_Oracle --upgrade --user

如果您在代理后面,则将代理服务器添加到命令中,例如add --proxy=http://proxy.example.com:80

如果您的体系结构可用它将下载并安装预编译的二进制文件如果没有预编译的二进制文件,则将下载,编译源文件并安装生成的二进制文件。编译cx_Oracle需要Python.h头文件。如果使用默认python软件包,则此文件位于python-devel 软件包或等效文件中

安装Oracle客户端

使用cx_Oracle要求安装Oracle客户端库。这些提供了必要的网络连接性,从而允许cx_Oracle访问Oracle数据库实例。

  • 如果您的数据库位于远程计算机上,请 为您的操作系统体系结构下载免费的Oracle Instant Client “ Basic”或“ Basic Light”软件包。根据您的喜好使用RPM或ZIP软件包。
  • 或者,使用本地安装的数据库中已有的客户端库,例如免费的Oracle Database Express Edition(“ XE”) 版本。

Oracle Instant Client Zip文件

要将cx_Oracle与Oracle Instant Client zip文件一起使用:

  1. 下载Oracle 19、18、12或11.2“ Basic”或“ Basic Light” zip文件:64位 或32位,与您的Python体系结构匹配。

    建议使用最新版本。Oracle Instant Client 19将连接到Oracle Database 11.2或更高版本。

  2. 将软件包解压缩到应用程序可访问的单个目录中。例如:

    mkdir -p /opt/oracle
    cd /opt/oracle
    unzip instantclient-basic-linux.x64-19.6.0.0.0dbru.zip
    
  3. libaio使用sudo或以root用户身份安装软件包。例如:

    sudo yum install libaio
    

    在某些Linux发行版中,此软件包被称为libaio1

    在最新的Linux版本(例如Oracle Linux 8)上,您可能还需要安装该libnsl软件包。

  4. 如果计算机上没有其他会受影响的Oracle软件,则将Instant Client永久添加到运行时链接路径。例如,使用sudo或以root用户身份:

    sudo sh -c "echo /opt/oracle/instantclient_19_6 > /etc/ld.so.conf.d/oracle-instantclient.conf"
    sudo ldconfig
    

    或者,将环境变量设置LD_LIBRARY_PATH为Instant Client版本的适当目录。例如:

    export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_6:$LD_LIBRARY_PATH
    
  5. 如果使用可选的Oracle配置文件,如tnsnames.ora, sqlnet.oraoraaccess.xml与即时客户端,然后将文件放在一个可访问的目录中,例如在 /opt/oracle/your_config_dir然后使用:

    import cx_Oracle
    cx_Oracle.init_oracle_client(config_dir="/home/your_username/oracle/your_config_dir")
    

    或将环境变量TNS_ADMIN设置为该目录名称。

    或者,将文件放在network/adminInstant Client子目录中,例如在中/opt/oracle/instantclient_19_6/network/admin这是与此即时客户端链接的可执行文件的默认Oracle配置目录。

Oracle Instant Client RPM

要将cx_Oracle与Oracle Instant Client RPM一起使用:

  1. 下载Oracle 19、18、12或11.2“ Basic”或“ Basic Light” RPM:64位 或32位,与您的Python体系结构匹配。

    Oracle的百胜服务器的Oracle Linux的7即时客户端的RPM ,并为Oracle Linux 6的即时客户端的RPM ,可以无需点击后进行下载。

    建议使用最新版本。Oracle Instant Client 19将连接到Oracle Database 11.2或更高版本。

  2. 以sudo或以root用户身份安装下载的RPM。例如:

    sudo yum install oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm
    

    Yum将自动安装所需的依赖项,例如libaio

    在最新的Linux版本(例如Oracle Linux 8)上,您可能需要手动安装该libnsl软件包。

  3. 对于Instant Client 19,在安装过程中会自动配置系统库搜索路径。

    对于较旧的版本,如果计算机上没有其他会受影响的Oracle软件,则将Instant Client永久添加到运行时链接路径。例如,使用sudo或以root用户身份:

    sudo sh -c "echo /usr/lib/oracle/18.3/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
    sudo ldconfig
    

    或者,对于版本18和更早版本,每个运行Python的外壳都需要将环境变量 LD_LIBRARY_PATH设置为Instant Client版本的适当目录。例如:

    export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib:$LD_LIBRARY_PATH
    
  4. 如果使用可选的Oracle配置文件,如tnsnames.ora, sqlnet.oraoraaccess.xml与即时客户端,然后将文件放在一个可访问的目录中,例如在 /opt/oracle/your_config_dir然后使用:

    import cx_Oracle
    cx_Oracle.init_oracle_client(config_dir="/opt/oracle/your_config_dir")
    

    或将环境变量TNS_ADMIN设置为该目录名称。

    或者,将文件放在network/adminInstant Client子目录中,例如在中/usr/lib/oracle/19.6/client64/lib/network/admin这是与此即时客户端链接的可执行文件的默认Oracle配置目录。

本地数据库或完整的Oracle客户端

cx_Oracle应用程序可以使用本地Oracle数据库中的Oracle Client 19、18、12或11.2库,也可以使用完整的Oracle Client安装。

这些库必须是32位或64位,与您的Python体系结构匹配。

  1. 通过运行Oracle环境脚本来设置必需的Oracle环境变量。例如:

    source /usr/local/bin/oraenv
    

    对于Oracle Database Express Edition(“ XE”)11.2,运行:

    source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
    
  2. 可选Oracle配置文件,如tnsnames.ora, sqlnet.oraoraaccess.xml可以放置在 $ORACLE_HOME/network/admin

    或者,可以将Oracle配置文件放在另一个可访问的目录中。然后将环境变量 TNS_ADMIN设置为该目录名称。

在Oracle Linux上安装cx_Oracle RPM

可从Oracle Linux yum服务器获得Python和cx_Oracle RPM软件包易于安装各种版本的Python。使用yum服务器可以轻松保持最新状态。

安装说明在适用于Python开发人员的Oracle Linux中

在Windows上安装cx_Oracle

安装cx_Oracle

使用Python的Pip 软件包从PyPI安装cx_Oracle 

python -m pip install cx_Oracle --upgrade

如果您位于代理服务器后面,请指定代理服务器:

python -m pip install cx_Oracle --proxy=http://proxy.example.com:80 --upgrade

如果您的体系结构可用它将下载并安装预编译的二进制文件如果没有预编译的二进制文件,则将下载,编译源文件并安装生成的二进制文件。

安装Oracle客户端

使用cx_Oracle要求安装Oracle客户端库。这些提供了必要的网络连接性,从而允许cx_Oracle访问Oracle数据库实例。支持Oracle客户端版本19、18、12和11.2。

Oracle Instant Client Zip文件

要将cx_Oracle与Oracle Instant Client zip文件一起使用:

  1. 下载Oracle 19、18、12或11.2“ Basic”或“ Basic Light” zip文件:64位 或32位,与您的Python体系结构匹配。

    建议使用最新版本。Oracle Instant Client 19将连接到Oracle Database 11.2或更高版本。

    Windows 7用户:请注意,Windows 7不支持Oracle 19c。

  2. 将软件包解压缩到应用程序可访问的目录中。例如解压缩 instantclient-basic-windows.x64-19.6.0.0.0dbru.zip到 C:\oracle\instantclient_19_6

  3. 有几种其他方法可以告诉cx_Oracle Oracle Client库在哪里,请参见cx_Oracle 8初始化

    • 借助Oracle Instant Client,您可以init_oracle_client() 在应用程序中使用,例如:

      import cx_Oracle
      cx_Oracle.init_oracle_client(lib_dir=r"C:\oracle\instantclient_19_6")
      

      请注意,使用“原始”字符串是因为路径中会出现反斜杠。

    • 或者,将Oracle Instant Client目录添加到PATH 环境变量。该目录必须出现在PATH任何其他Oracle目录之前。重新启动所有打开的命令提示符窗口。

    • 另一种设置方法PATH是使用批处理文件在Python执行之前对其进行设置,例如:

      REM mypy.bat
      SET PATH=C:\oracle\instantclient_19_6;%PATH%
      python %*
      

      每次您要运行Python时都调用此批处理文件。

  4. Oracle Instant Client库需要使用64位或32位体系结构可再发行的Visual Studio,以匹配Instant Client的体系结构。每个Instant Client版本都需要一个不同的可再发行版本:

  5. 如果使用可选的Oracle配置文件,如tnsnames.ora, sqlnet.oraoraaccess.xml与即时客户端,然后将文件放在一个可访问的目录中,例如在 C:\oracle\your_config_dir然后使用:

    import cx_Oracle
    cx_Oracle.init_oracle_client(config_dir=r"C:\oracle\your_config_dir")
    

    或将环境变量TNS_ADMIN设置为该目录名称。

    或者,将文件放在network\adminInstant Client子目录中,例如在中 C:\oracle\instantclient_19_6\network\admin这是与此即时客户端链接的可执行文件的默认Oracle配置目录。

本地数据库或完整的Oracle客户端

cx_Oracle应用程序可以使用本地Oracle数据库或完整的Oracle Client中的Oracle Client 19、18、12或11.2库。

Oracle库必须是32位或64位,与您的Python体系结构匹配。

  1. 设置环境变量PATH以包含包含的路径 OCI.DLL(如果尚未设置)。

    重新启动所有打开的命令提示符窗口。

  2. 可选的Oracle配置文件,如tnsnames.ora, sqlnet.oraoraaccess.xml可以放置在 network\adminOracle数据库软件安装目录的子目录。

    或者, 如上一节中所示传递config_dirinit_oracle_client(),或设置TNS_ADMIN为目录名称。

在macOS上安装cx_Oracle

安装Python

确保您没有使用捆绑的Python。这些具有有限的权利,并且将无法加载Oracle客户端库。而是使用 HomebrewPython.org

注意macOS 10.15 Catalina不支持Instant Client 19及更早版本。您将需要允许从“安全性和隐私”首选项窗格访问多个Instant Client库。

安装cx_Oracle

使用Python的Pip 软件包从PyPI安装cx_Oracle 

python -m pip install cx_Oracle --upgrade

--user如果您无权写入系统目录,则选项可能很有用:

python -m pip install cx_Oracle --upgrade --user

如果您在代理后面,则将代理服务器添加到命令中,例如add --proxy=http://proxy.example.com:80

将下载,编译源代码,并安装生成的二进制文件。

安装Oracle Instant Client

cx_Oracle需要Oracle客户端库,可在macOS的Oracle Instant Client中找到。这些提供了必要的网络连接性,从而允许cx_Oracle访问Oracle数据库实例。

要将cx_Oracle与Oracle Instant Client zip文件一起使用:

  1. 此处下载Oracle 19、18、12或11.2“ Basic”或“ Basic Light” zip文件选择与您的Python体系结构匹配的64位或32位软件包。

    建议使用最新版本。Oracle Instant Client 19将连接到Oracle Database 11.2或更高版本。

  2. 将软件包解压缩到应用程序可访问的单个目录中。例如,在终端中,您可以将您的主目录解压缩:

    cd ~
    unzip instantclient-basic-macos.x64-19.3.0.0.0dbru.zip
    

    这将创建一个目录/Users/your_username/instantclient_19_3

  3. 有几种其他方法可以告诉cx_Oracle Oracle Instant Client库在哪里,请参见cx_Oracle 8初始化

    • 您可以init_oracle_client()在您的应用程序中使用

      import cx_Oracle
      cx_Oracle.init_oracle_client(lib_dir="/Users/your_username/instantclient_19_3")
      
    • 或者,使用cx_Oracle模块二进制文件找到目录,并将Oracle Instant Client链接或复制到该目录。例如,如果您--user在Python 3.8中安装了cx_Oracle ,则 cx_Oracle.cpython-38-darwin.so可能在中 ~/Library/Python/3.8/lib/python/site-packages然后,您可以运行 或将Instant Client库复制到该目录。ln -s ~/instantclient_19_3/libclntsh.dylib ~/Library/Python/3.8/lib/python/site-packages

    • 另外,您可以设置DYLD_LIBRARY_PATH到包含Oracle Instant Client的目录,但是需要在每个调用Python的终端或进程中进行设置。该变量将不会传播到子外壳。

    • 或者,在旧版本的macOS上,您可以添加链接 $HOME/lib/usr/local/lib使应用程序能够找到Instant Client。如果lib子目录不存在,则可以创建它。例如:

      mkdir ~/lib
      ln -s ~/instantclient_19_3/libclntsh.dylib ~/lib/
      

      除了链接,您可以复制所需的OCI库。例如:

      mkdir ~/lib
      cp ~/instantclient_19_3/{libclntsh.dylib.19.1,libclntshcore.dylib.19.1,libnnz19.dylib,libociei.dylib} ~/lib/
      

      对于Instant Client 11.2,必须复制OCI库。例如:

      mkdir ~/lib
      cp ~/instantclient_11_2/{libclntsh.dylib.11.1,libnnz11.dylib,libociei.dylib} ~/lib/
      
  4. 如果您使用可选的Oracle配置文件(例如tnsnames.ora) sqlnet.oraoraaccess.xml与Oracle Instant Client一起使用,则将文件放在可访问的目录中,例如 /Users/your_username/oracle/your_config_dir然后使用:

    import cx_Oracle
    cx_Oracle.init_oracle_client(config_dir="/Users/your_username/oracle/your_config_dir")
    

    或将环境变量TNS_ADMIN设置为该目录名称。

    或者,将文件放在network/adminOracle Instant Client子目录中,例如在中 /Users/your_username/instantclient_19_3/network/admin这是与此即时客户端链接的可执行文件的默认Oracle配置目录。

在没有Internet访问的情况下安装cx_Oracle

要在未连接到互联网的计算机上安装cx_Oracle,请从PyPI下载相应的cx_Oracle文件将此文件传输到脱机计算机并使用以下方法安装:

python -m pip install "<file_name>"

然后,按照通用的cx_Oracle平台安装说明来安装Oracle客户端库。

使用GitHub安装

为了使用GitHub上的源代码进行安装,请使用以下命令:

git clone https://github.com/oracle/python-cx_Oracle.git cx_Oracle
cd cx_Oracle
git submodule init
git submodule update
python setup.py install

请注意,如果您直接从GitHub下载源zip文件,则还需要下载ODPI-C源zip文件并将其解压缩到名为“ odpi”的目录中。

也可以从oss.oracle.com获得cx_Oracle源代码。可以使用以下方法克隆:

git clone git://oss.oracle.com/git/oracle/python-cx_Oracle.git cx_Oracle
cd cx_Oracle
git submodule init
git submodule update

从PyPI使用源安装

可以从PyPI手动下载源软件包 并解压缩,然后运行以下命令:

python setup.py build
python setup.py install

从旧版本升级

查看发行说明是否过时并修改任何受影响的代码。

如果要从cx_Oracle 7升级,请注意以下更改:

如果要从cx_Oracle 5升级,请注意以下安装更改:

  • 使用Oracle Instant Client时,不应设置ORACLE_HOME
  • 在Linux上,cx_Oracle 6和更高版本不再自动使用Instant Client RPM。您必须设置LD_LIBRARY_PATH或用于ldconfig查找Oracle客户端库。
  • PyPI不再允许托管Windows安装程序或Linux RPM。请改用提供的cx_Oracle Wheels,或使用Oracle的RPM,请参阅在Oracle Linux上安装cx_Oracle RPM

在Python 2中安装cx_Oracle

cx_Oracle 7.3是支持Python 2的最新版本。

如果使用上面提供的命令在Python 2中安装cx_Oracle,则将安装cx_Oracle 7.3。这等效于使用如下命令:

python -m pip install cx_Oracle==7.3 --upgrade --user

有关其他安装选项(例如通过代理安装),请参阅上面的说明。确保Oracle Client库在系统库搜索路径中,因为cx_Oracle 7不支持该 cx_Oracle.init_oracle_client()方法,并且不支持从包含cx_Oracle模块二进制文件的目录中加载Oracle Client库。

安装cx_Oracle 5.3

如果您需要cx_Oracle 5.3,请从PyPI下载Windows安装程序或用于从源代码安装。python -m pip install cx-oracle==5.3

可以在SourceForce的“文件”部分中找到非常旧的cx_Oracle版本 

故障排除

如果安装失败:

  • -v与pip一起使用选项查看输出和日志。尝试使用其他方法进行安装。谷歌任何看起来像一个错误。 尝试一些潜在的解决方案。
  • 网络连接错误吗?您是否需要设置环境变量http_proxy和/或https_proxy还是尝试pip install --proxy=http://proxy.example.com:80 cx_Oracle --upgrade
  • 如果升级没有错误,但仍安装了旧版本,请尝试 pip install cx_Oracle --upgrade --force-reinstall
  • 如果您无权修改Python的系统版本,可以使用 还是venv?pip install cx_Oracle --upgrade --user
  • 您是否收到错误“ ”?pip模块内置于Python,但有时会被操作系统删除。请使用venv模块(内置于Python 3.x)或virtualenv模块。No module named pip
  • 从源代码构建时是否得到错误“ ”?确保源安装中有一个包含文件的名为“ odpi”的子目录。如果缺少,请查看“使用GitHub安装”部分fatal error: dpi.h: No such file or directory

如果使用cx_Oracle失败:

  • 您是否收到错误“ ”?DPI-1047: Oracle Client library cannot be loaded
    • 检查Python,cx_Oracle和Oracle Client库都是64位还是32位。DPI-1047消息将告诉您Python是否需要64位或32位Oracle Client。
    • 在Windows上,如果您使用过init_oracle_client()并且具有完整的数据库安装,请确保该数据库是当前配置的数据库
    • 在Windows上,如果您没有使用 init_oracle_client(),则重新启动命令提示符,并使用来检查环境变量在所有其他Oracle目录之前是否列出了正确的Oracle Client。set PATH
    • 在Windows上,使用DIR命令验证OCI.DLL传递到init_oracle_client()或在中设置的目录中是否存在PATH
    • 在Windows上,检查是否已安装正确的Windows Redistributable
    • 在Linux上,检查LD_LIBRARY_PATH环境变量是否包含Oracle Client库目录。如果使用的是Oracle Instant Client,则首选方法是确保/etc/ld.so.conf.d目录中的文件 包含Instant Client目录的路径,然后运行ldconfig
    • 在macOS上,确保未使用捆绑的Python(改为使用HomebrewPython.org)。如果不使用 init_oracle_client(),则将Oracle Instant Client库放在~/lib或中/usr/local/lib
  • 如果显示“ ”,请检查安装要求。cx_Oracle需要Oracle客户端库11.2或更高版本。请注意,Windows 7不支持版本19。以上所示的类似步骤可能会有所帮助。DPI-1072: the Oracle Client library version is unsupportedDPI-1047
  • 如果安装了多个版本的Python,请确保使用正确的python和pip(或python3和pip3)可执行文件。
posted @ 2020-12-02 12:59  blck  阅读(4014)  评论(0编辑  收藏  举报