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

news2024/10/7 14:29:41

文章目录

    • cx_Oracle 介绍
    • cx_Oracle运行原理
    • cx_Oracle 安装
      • linux环境安装
      • windows环境安装
    • cx_Oracle 使用
      • 单独使用
      • 结合Pandas使用
    • 参考资料

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1866110.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot vue 开源 会员收银系统 (8) 收银台、开卡结算及订单的优化升级

前言 完整版演示 开发版演示 在之前的开发进程中,我们基本搭建了收银台的基础。这次着重梳理一下收银台相关功能的开发及优化情况。 1.会员查询与开卡 收银台新增加了会员筛选功能 并且会员和会员卡是一对多的关系 理论可以开无数张卡 默认选择一张卡 会员卡选择…

国家自然科学基金标书大全(2002-2024)

数据来源:在20世纪80年代初,为了促进中国的科技体制革新并改革科研资金分配机制,中国科学院的89位院士联名向党和国家领导人提出建议,设立了国家自然科学基金的设立。国自然基金自创立以来,根据国家发展科学技术方针、…

张大哥笔记:赚钱第一步,把手弄脏,准时出摊

出来混,最重要的是什么?是“出来”。同样的,赚钱第一步,也是先出来,立刻开始行动起来! 想要赚钱,最关键的因素是什么?答案是“先出来”。赚钱这件事,本身就是反人性的&am…

引导过程与服务器控制

一、引导过程 1.开机自检 服务器主机开机以后,将根据主板 BIOS 中的设置对 CPU(Central Processing Unit, 中央处理器)、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移 交系统控制权&#xff0c…

深入学习Java1415新特性

一、超实用的Java14新特性 1.Java14新特性概述 2.环境安装 3.超实用新特性

png格式快速压缩该怎么做?在电脑压缩png图片的方法

png格式的图片如何快速压缩变小呢?现在网络的不断发展,图片是日常用来分享展示内容的一种常用手段,其中使用最多的一种图片格式就是png,png格式具有无损压缩支持透明底的特性,在很多的场景下都会使用。 现在图片的清晰…

2024体育赛事一波接一波,大学生借IKCEST国际大数据竞赛打造AI“嘴强”主播

2024德国欧洲杯激战正酣,不但比赛精彩纷呈,各种新科技还竞相“整活”。从虚拟广告技术到人工智能辅助裁判,令人目不暇接。而“AI体育”的想象空间,还不仅于此。 近日,2024IKCEST第六届“一带一路”国际大数据竞赛暨第…

ES6深潜指南:解锁JavaScript类与继承的高级技巧,让您的代码更加优雅

前言 随着前端技术的迅猛发展,JavaScript已经成为构建现代Web应用不可或缺的编程语言。ES6(ECMAScript 2015)引入了许多期待已久的特性,其中类(Classes)和继承机制的引入,极大地增强了JavaScrip…

ONLYOFFICE 桌面编辑器 8.1使用体验分享

目录 编辑器市场现状与用户选择 ONLYOFFICE桌面编辑器概览和功能 ONLYOFFICE桌面编辑器概览 功能丰富的PDF编辑器 演示文稿编辑器的创新 文档编辑的灵活性 电子表格的高级功能 语言和本地化 用户界面和体验 媒体播放 云服务和本地处理 跨平台支持 总结 在线亲身体…

C++用Crow实现一个简单的Web程序,实现动态页面,向页面中输入数据并展示

Crow是一个轻量级、快速的C微框架,用于构建Web应用程序和RESTful API。 将处理前端页面的POST请求以添加数据的逻辑添加到 /submit 路由中,并添加了一个新的路由 / 用于返回包含输入框、按钮和表格的完整页面。当用户向表格添加数据时,JavaS…

Prometheus中添加基本身份验证功能

在Prometheus中添加基本身份验证功能,可以按照以下步骤进行: 一、生成哈希密码 首先,需要安装bcrypt工具,用于生成哈希密码。这可以通过Python的bcrypt库来完成。如果未安装,可以使用pip进行安装。 创建一个Python脚…

酷开科技丨酷开系统大屏购物 打造沉浸式购物体验

在这个信息化的时代,购物已经不仅仅局限于传统的线下店铺,线上购物逐渐成为了我们生活中重要的一部分。而大屏购物作为线上购物的一种形式,更是凭借其独特的优势和实用的技巧,成为了消费者们的新宠。随着科技的进步和消费者需求的…

onlyoffice实现在单页面加载文档的功能

草图 实现案例的基本原型 这里我们的样式库使用的是Tailwindcss,我们的前端UI组件库使用的是Ant Design Vue。 基本原型是,有个按钮,没有点击按钮的时候,页面显示的时普通的内容。当点击这个按钮的时候,页面加载文档…

STM32启动流程 和 map文件的作用

一,启动流程 1. 复位/上电 2. 根据 BOOT0/BOOT1 确定程序从哪个存储位置执行 3. 初始化 SP 及 PC 指针 将 0X08000000 位置的栈顶地址存放在 SP 指针中 将 0x08000004 位置存放的向量地址装入 PC 程序计数器 4. 初始化系统时钟 5. 初始化用户堆栈 6. 进入main函数 二…

python的一些常用的内建函数

内建函数 python中的内建函数是可以被自动加载的,可以随时调用这些函数,不 需要定义。方便的编程。 eval()函数 将字符串当成有效的表达式来求值,并返回计算结果 用于对动态表达式求值,语法格式如下: eval(source&…

跨境独立站推广策略:有哪些方法与工具?

在出海独立站商家中,推广是必不可少的环节。在你完成网站的搭建,产品的上架,以及网站的运营和优化后,你就可以开始着手推广你的网站了。你的网站是承载你的品牌和产品的主要平台,因此,你需要根据你的品牌和…

零成本搭建个人图床服务器

前言 图床服务器是一种用于存储和管理图片的服务器,可以给我们提供将图片上传后能外部访问浏览的服务。这样我们在写文章时插入的说明图片,就可以集中放到图床里,既方便多平台文章发布,又能统一管理和备份。 当然下面通过在 Git…

浅谈网络通信(4)

文章目录 一、应用层常见协议——HTTP[!]1.1 HTTP报文格式1.1.1、HTTP协议中的方法[!]1.1.2、请求1.1.2.1、构造 GET 请求的几种方式1.1.2.2、构造 POST 请求的几种方式1.1.2.3、请求头(header)1.1.2.4、Content-Type常见取值 1.1.3、响应1.1.3.1、HTTP响应详解 1.1.4、HTTP协议…

加速人工智能“拔节生长”,为发展注入“智慧”动能

人工智能是新一轮科技革命和产业变革的重要驱动力量,将对全球经济社会发展和人类文明进步产生深远影响。6月20日,以“智行天下 能动未来”为主题的2024世界智能产业博览会在天津开幕,全方位展示了人工智能、智能网联汽车、智能制造等多领域的…

文档格式批量转换-LibreOffice安装及使用(Windows)

一、LibreOffice的下载 下载网址: 主页 | LibreOffice 简体中文官方网站 - 自由免费的办公套件 点击Windows版本下载 安装下载的文件 安装类型选择自定义,下一步修改软件安装的位置,为了不占用C盘空间,我安装在了D盘。 文件类…