Python数据分析之-Oracle数据库连接

og.csdnimg.cn/direct/9e2cbae962a643cdaa5846edba8ce49f.png)

cx_Oracle 介绍

cx_Oracle 8是一个Python扩展模块,它提供了对Oracle数据库的访问能力。以下是cx_Oracle 8的一些关键特性和功能:

  • 易于安装:可以通过PyPI轻松安装。
  • Python版本支持:支持Python 3.6及更高版本。旧版本的cx_Oracle可能与旧版本的Python兼容。
  • Oracle客户端支持:支持Oracle客户端版本11.2、12、18、19和21。利用Oracle的标准跨版本互操作性,可以连接到不同版本的Oracle数据库。
  • 数据库版本兼容性:可以连接到Oracle数据库9.2、10、11、12、18、19或21(取决于使用的Oracle客户端版本)。
  • SQL和PL/SQL执行:支持执行SQL语句和调用PL/SQL过程。
  • 性能优化:底层的Oracle客户端库进行了优化,包括压缩获取、预获取、客户端和服务器结果集缓存以及具有自动调整功能的语句缓存。
  • 网络服务:充分利用Oracle网络服务基础架构,包括加密的网络流量和安全功能。
  • 数据类型支持:广泛支持Oracle数据类型,包括大型对象(CLOB和BLOB)。
  • JSON数据类型支持:支持Oracle的JSON数据类型。
  • SODA:支持简单的Oracle文档访问(SODA)。
  • 数组操作:支持数组操作,用于高效插入和更新。
  • 批错误处理:支持数组行计数和批错误处理。
  • 大型结果集获取:支持获取大型结果集。
  • 滚动光标支持:支持滚动光标,允许多次查看查询结果。
  • PL/SQL隐式结果获取:轻松从PL/SQL返回查询结果。
  • 行预取:有效利用网络,提高性能。
  • 客户端结果缓存:提高频繁执行的查找语句的性能。
  • 高级排队:支持使用数据库通知构建微服务应用程序。
  • 连续查询通知:在数据更改时收到通知。
  • 基于版本的重新定义:轻松切换应用程序以使用更新的PL/SQL逻辑。
  • 应用程序上下文设置:支持在创建连接期间设置应用程序上下文,使数据库更容易访问应用程序元数据。
  • 监控和跟踪:支持端到端监控和跟踪。
  • 交易管理:包括会话池、标记和会话状态修复回调。
  • 数据库驻留连接池(DRCP):支持Oracle数据库的高可用性功能。
  • 外部身份验证:支持特权关系和外部身份验证。
  • 分片数据库:支持Oracle数据库的分片功能。

cx_Oracle 8提供了丰富的功能,使得Python开发者可以高效地与Oracle数据库进行交互。

cx_Oracle运行原理

cx_Oracle的工作流程大致如下:

  • 用户编写Python脚本,使用cx_Oracle模块中的API连接到Oracle数据库。
  • cx_Oracle模块加载Oracle客户端库,这些库提供了与Oracle Net服务通信所需的功能。
  • 通过Oracle Net服务,cx_Oracle模块在用户指定的数据库上建立连接。
  • 用户通过cx_Oracle模块执行SQL和PL/SQL命令,这些命令通过Oracle Net发送到数据库。
  • 数据库处理这些命令,并将结果通过Oracle Net返回给cx_Oracle模块。
  • cx_Oracle模块将结果传递给Python脚本,供进一步处理或分析。

如下图所示:
在这里插入图片描述

通过这种架构,cx_Oracle模块为Python程序提供了强大且灵活的数据库访问能力,支持复杂的数据分析和操作任务。cx_Oracle架构主要涉及以下几个关键组件:

  1. Python环境:cx_Oracle作为一个Python模块,需要在Python环境中运行。Python提供了cx_Oracle模块执行所需的运行时环境。

  2. cx_Oracle模块:这是Python与Oracle数据库交互的接口。它提供了一组API,允许Python程序执行SQL语句,调用PL/SQL过程,以及处理来自Oracle数据库的数据。

  3. Oracle客户端库:cx_Oracle需要Oracle客户端库来实现与Oracle数据库的通信。这些客户端库包括:

    • Oracle Instant Client:免费的轻量级版本,包含最小化的二进制文件,用于支持Oracle客户端功能。
    • 完整Oracle客户端:提供完整的客户端功能,包括各种工具和实用程序。
  4. Oracle Net:Oracle Net服务是Oracle数据库的网络接口,负责在Oracle客户端和服务器之间传输数据。它不是cx_Oracle模块的一部分,但是cx_Oracle使用Oracle Net服务来建立和维护与数据库的连接。

  5. Oracle数据库:这是cx_Oracle模块交互的目标数据库。它可以是一个本地数据库,也可以是一个远程数据库,通过网络访问。

  6. 操作系统和硬件平台:cx_Oracle可以在多种操作系统和硬件平台上运行,包括Linux、Windows和macOS。Oracle客户端库也需要与这些平台兼容。

  7. 用户身份验证:cx_Oracle通过用户名和密码进行身份验证,以建立与Oracle数据库的连接。

  8. SQL和PL/SQL引擎:一旦连接建立,cx_Oracle可以利用Oracle数据库的SQL和PL/SQL引擎执行查询和过程。

cx_Oracle 安装

linux环境安装

在Linux环境下安装cx_Oracle的步骤可以总结如下:

  1. 使用pip安装cx_Oracle
    使用Python的包管理工具pip从PyPI安装cx_Oracle:

    python -m pip install cx_Oracle --upgrade
    
  2. 安装Oracle客户端
    使用cx_Oracle需要安装Oracle客户端库,这些库提供了必要的网络连接,允许cx_Oracle访问Oracle数据库实例。这里使用使用Oracle Instant Client ZIP文件

    • 下载与你的Python 64位或32位架构相匹配的Oracle 21、19、18、12或11.2的“Basic”或“Basic Light”ZIP文件。Oracle Instant Client 下载
    • 解压ZIP包到应用程序可访问的单一目录中,例如:
      mkdir -p /opt/oracle
      cd /opt/oracle
      unzip instantclient-basic-linux.x64-11.2.0.4.0.zip
      
    • 安装libaio包,例如使用:
      sudo yum install libaio
      
  3. 配置环境变量

    设置环境变量LD_LIBRARY_PATH以指向Instant Client的适当目录, 在 ~/.bashrc 添加下面内容

    export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2:$LD_LIBRARY_PATH
    

    使用source ~/.bashrc使环境变量生效。

windows环境安装

在Windows环境下安装cx_Oracle的步骤可以总结如下:

  1. 使用pip安装cx_Oracle
    使用Python的包管理工具pip从PyPI安装cx_Oracle:

    python -m pip install cx_Oracle --upgrade
    
  2. 安装Oracle客户端
    使用cx_Oracle需要安装Oracle客户端库,这些库提供了必要的网络连接,允许cx_Oracle访问Oracle数据库实例。这里使用使用Oracle Instant Client ZIP文件

    • 下载与你的Python 64位或32位架构相匹配的Oracle 21、19、18、12或11.2的“Basic”或“Basic Light”ZIP文件。Oracle Instant Client 下载
    • 解压 instantclient-basic-windows.x64-11.2.0.4.0.zip 文件到 D:\oracle\instantclient_11_2.
  3. 配置环境变量

    • 方法1: 使用代码中制定Oracle客户端路径。

      import cx_Oracle
      # 填入下载下来的Oracle客户端解压后的路径
      cx_Oracle.init_oracle_client(lib_dir=r"D:\oracle\instantclient_11_2")
      
    • 方法2: 配置环境变量。

      • 添加环境变量 ORACLE_HOME= D:\oracle\instantclient_11_2
        在这里插入图片描述

      • 把oracle客户端中D:\oracle\instantclient_11_2下的三个dell文件,复制到python编译器script目录下。
        在这里插入图片描述

cx_Oracle 使用

单独使用

以下是cx_Oracle的一些基本使用示例:

  1. 连接到Oracle数据库

    import cx_Oracle
    
    # 定义Oracle数据库的连接字符串
    dsn = cx_Oracle.makedsn('hostname', port, service_name='service_name')
    # 创建连接,使用用户名和密码
    connection = cx_Oracle.connect('username', 'password', dsn)
    
    # 确认连接
    print("数据库连接成功")
    
  2. 执行查询并获取结果

    # 创建游标对象
    cursor = connection.cursor()
    
    # 执行SQL查询
    cursor.execute("SELECT * FROM your_table")
    
    # 获取所有结果
    results = cursor.fetchall()
    
    # 遍历结果
    for row in results:
        print(row)
    # 关闭游标
    cursor.close()
    
  3. 插入数据

    # 再次创建游标
    cursor = connection.cursor()
    
    # 执行插入操作
    cursor.execute("INSERT INTO your_table (column1, column2) VALUES (:value1, :value2)", value1='data1', value2='data2')
    
    # 提交事务
    connection.commit()
    
    # 关闭游标
    cursor.close()
    
  4. 处理异常

    try:
        # 尝试执行可能引发异常的操作
        cursor.execute("SOME SQL STATEMENT")
    except cx_Oracle.DatabaseError as e:
        # 打印错误
        print(f"Database error occurred: {e}")
    finally:
        # 确保游标被关闭
        cursor.close()
    
  5. 关闭数据库连接

    # 关闭数据库连接
    connection.close()
    

这些示例提供了cx_Oracle的基本用法,包括连接到数据库、执行查询、插入数据、异常处理以及关闭连接。在实际应用中,你可能还需要处理更复杂的数据库操作和事务管理。

结合Pandas使用

Pandas 是 Python 中用于数据分析的一个强大库,它提供了快速、灵活且表达力强的数据结构,旨在使数据清洗和分析工作变得更加简单易行。结合 cx_Oracle 模块,你可以很容易地将 Pandas 用于操作 Oracle 数据库中的数据。以下是一些使用 Pandas 与 Oracle 数据库的基本示例:

  1. 读取Oracle数据到Pandas DataFrame

    import cx_Oracle
    import pandas as pd
    
    # 连接到Oracle数据库
    connection = cx_Oracle.connect('username', 'password', 'hostname:port/service_name')
    # 查询语句
    query = "SELECT * FROM your_table"
    # 使用Pandas的read_sql_query函数读取数据
    df = pd.read_sql_query(query, connection)
    # 查看DataFrame的前几行数据
    print(df.head())
    # 关闭连接
    connection.close()
    
  2. 将Pandas DataFrame写入Oracle数据库

    # 假设df是一个已经存在的DataFrame,我们要将它写入Oracle数据库
    
    # 连接到Oracle数据库
    connection = cx_Oracle.connect('username', 'password', 'hostname:port/service_name')
    # 将DataFrame写入数据库
    df.to_sql('new_table', connection, if_exists='replace', index=False)
    # 关闭连接
    connection.close()
    

    to_sql 函数的 if_exists 参数可以是 'fail''replace''append',分别用于处理表已存在时失败、替换现有表或追加数据到现有表。

  3. 使用Pandas处理数据后更新Oracle数据库

    # 假设我们要更新一些数据
    
    # 连接到Oracle数据库
    connection = cx_Oracle.connect('username', 'password', 'hostname:port/service_name')
    # 创建游标
    cursor = connection.cursor()
    
    # 先读取数据
    query = "SELECT * FROM your_table WHERE condition"
    df_to_update = pd.read_sql_query(query, connection)
    # 在Pandas DataFrame中处理数据
    # 例如,将某个列的值增加1
    df_to_update['column_name'] += 1
    
    # 根据condition删除数据库的数据
    # 定义删除条件
    delete_sql = "DELETE FROM your_table WHERE column_name = :value"
    value = 'some_value'  # 替换为实际的删除条件值
    # 执行DELETE语句
    cursor.execute(delete_sql, value=value)
    # 提交事务
    connection.commit()
    
    # 将更新后的数据写回数据库
    df_to_update.to_sql('your_table', connection, if_exists='append', index=False)
    # 关闭游标和连接
    cursor.close()
    # 关闭连接
    connection.close()
    

    请注意,这些示例假设你已经安装了 cx_Oraclepandas 模块,并且已经正确配置了Oracle数据库的访问权限和网络设置。在实际应用中,你可能需要根据实际的数据库表结构和业务逻辑调整SQL查询语句和数据处理逻辑。

参考资料

Quick Start cx_Oracle Installation
Oracle Instant Client Downloads for Linux x86-64 (64-bit)
python(28): 连接oracle环境离线安装及报错解决87,193
python操作Oracle数据库
15分钟解决此问题,DPI-1047: Cannot locate a 64-bit Oracle Client library: “The specified module could not be

  • 52
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,我们可以使用第三方库cx_Oracle来读取Oracle数据库。首先,需要安装cx_Oracle库,并确保已经设置好了Oracle客户端。接下来,可以按照以下步骤读取Oracle数据库: 1. 首先,导入必要的库: ```python import cx_Oracle ``` 2. 使用cx_Oracle.connect()函数连接到Oracle数据库,需要提供数据库的用户名、密码和连接字符串: ```python connection = cx_Oracle.connect('username', 'password', 'connection_string') ``` 请将'username'替换为您的Oracle数据库用户名,'password'替换为您的密码,'connection_string'替换为正确的连接字符串。 3. 创建一个游标对象,用于执行SQL查询: ```python cursor = connection.cursor() ``` 4. 使用cursor.execute()方法执行您的SQL查询。例如,如果您要查询名为"employees"的表中的所有记录,可以执行以下代码: ```python cursor.execute('SELECT * FROM employees') ``` 5. 使用cursor.fetchall()方法获取查询结果。例如,如果您想将查询结果存储在一个变量中: ```python results = cursor.fetchall() ``` 现在,您可以使用results变量来处理查询结果。 6. 最后,不要忘记关闭游标和数据库连接: ```python cursor.close() connection.close() ``` 这样就完成了从Oracle数据库中读取数据的过程。请确保您已经按照上述步骤正确安装和配置了cx_Oracle库,并提供了正确的数据库连接信息。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [PythonOracle数据库中获取数据——fetchall(),fetchone(),fetchmany()函数功能分析](https://blog.csdn.net/qq_28268527/article/details/128629153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [使用Python代码调用命令行来执行MySQL数据库备份和恢复操作](https://download.csdn.net/download/weixin_44609920/88222336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值