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

文章目录

    • 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.rhkb.cn/news/361779.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Superagent:一个开源的AI助手框架与API

在人工智能日益普及的今天,如何将AI助手无缝集成到应用中成为了开发者们关注的焦点。今天,我们要介绍的Superagent正是一个为这一需求量身打造的开源框架与API。它结合了LLM、检索增强生成(RAG)和生成式AI技术,为开发者们提供了一个强大而灵活的解决方案。 一、Superagen…

获取个人免费版Ubuntu Pro

首先上官网地址:Ubuntu Pro | Ubuntu 点击页面中的"Get Ubuntu Pro now" 将用途选为“Myself”,在此页面中Ubuntu说明了该版本只面向个人开发者,且最终只允许5台设备免费使用;因而部署设备的抉择就不得不慎重考虑了&am…

【js + ckeditor】插入base64格式的图片

一、需求说明 直接把图片转成base64插入到富文本 二、需求分析 1、富文本图片格式处理位置 在ckeidtor的目录下有个plugins文件夹,在plugins下新建一个文件夹(自己命名,如simpleupload),进入simpleupload文件夹&…

【Java Web】XML格式文件

目录 一、XML是什么 二、常见配置文件类型 *.properties类型: *.xml类型: 三、DOM4J读取xml配置文件 3.1 DOM4J的使用步骤 3.2 DOM4J的API介绍 一、XML是什么 XML即可扩展的标记语言,由标记语言可知其基本语法和HTML一样都是由标签构成的文件…

安卓直装植物大战僵尸杂交版V2.1版完美运行

安卓直装植物大战僵尸杂交版V2.1版完美运行 链接:https://pan.baidu.com/s/1SPFouV8T-AV2LnUoZfy6lQ?pwd3gl6 提取码:3gl6

【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解

最终效果 文章目录 最终效果前言存储位置信息存储更多数据存储场景信息持久化存储数据完结 前言 前面写过小型游戏存储功能: 【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解(包含数据安全处理方案的加密解密) 这次做一…

告别数据线!轻松实现iOS和安卓设备间的文件共享

用 AirDroid 的附近传输功能,完全免费,几十个G的文件也可以相互传输。不限制iPhone和iPad数量,多个设备同时登录也不会强迫下线。 当你要在苹果手机和安卓手机之间传输文件,请将AirDroid安装到两台手机上,然后登录同一…

搞定求职难题:工作岗位列表+简历制作工具 | 开源专题 No.75

SimplifyJobs/New-Grad-Positions Stars: 8.5k License: NOASSERTION 这个项目是一个用于分享和跟踪美国、加拿大或远程职位的软件工作机会列表。该项目的核心优势和关键特点如下: 自动更新新岗位信息便捷地提交问题进行贡献提供一键申请选项 BartoszJarocki/cv…

从0到1实现LLM学习笔记附录B(GPT-4o翻译版)

来源:https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

通过混合栅极技术改善p-GaN功率HEMTs的ESD性能

来源:Improved Gate ESD Behaviors of p-GaN PowerHEMTs by Hybrid Gate Technology(ISPSD 24年) 摘要 本工作中,首次证明了混合栅极技术在不增加额外面积和寄生效应的前提下,能有效提升p-GaN HEMTs的栅极静电放电(E…

5G赋能安防视频监控:EasyCVR视频汇聚融合创新技术,共筑多场景安全防线

随着科技的快速发展,第五代移动通信技术(5G)已逐渐成为我们生活中的重要组成部分。其中,5G技术以其超高速、低延迟、大连接数的特点,正在深刻改变着我们的生活方式和社会运行模式。安防监控领域作为社会安全的重要组成…

Web Worker 学习及使用

了解什么是 Web Worker 提供了可以在后台线程中运行 js 的方法。可以不占用主线程,不干扰用户界面,可以用来执行复杂、耗时的任务。 在worker中运行的是另一个全局上下文,不能直接获取 Window 全局对象。不同的 worker 可以分为专用和共享&…

Golang | Leetcode Golang题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; func numIslands(grid [][]byte) int {res : 0for i : 0; i < len(grid); i {for j : 0; j < len(grid[i]); j {if grid[i][j] 1 {resdfs(grid, i, j)}}}return res }func dfs(grid [][]byte, r, c int) {h, w : len(grid), len(gri…

ElasticSearch索引架构与存储

关于ES官网的介绍: Elasticsearch provides near real-time search and analytics for all types of data. Whether you have structured or unstructured text, numerical data, or geospatial data, Elasticsearch can efficiently store and index it in a way that support…

python--序列化模块json与pickle

什么叫序列化&#xff1f; 将原本的字典、列表等内容转换成一个字符串的过程就 叫做序列化。 多用的两个序列化模块&#xff1a;json与pickle json&#xff0c;用于字符串 和 python数据类型间进行转换 pickle&#xff0c;用于python特有的类型 和 python的数据类型间进行转换 …

springcloud-sentinel 限流组件中文文档

快速开始 欢迎来到 Sentinel 的世界&#xff01;这篇新手指南将指引您快速入门 Sentinel。 Sentinel 的使用可以分为两个部分: 核心库&#xff08;Java 客户端&#xff09;&#xff1a;不依赖任何框架/库&#xff0c;能够运行于 Java 8 及以上的版本的运行时环境&#xff0c…

星坤Type-A连接器:创新快充技术,引领电子连接!

快速发展的电子时代&#xff0c;消费者对电子设备的性能和便利性有着更高的要求。特别是在充电和数据传输方面&#xff0c;快充技术和高速传输已成为市场的新宠。中国星坤公司推出的Type-A连接器系列&#xff0c;以其卓越的性能和创新的设计&#xff0c;满足了市场对高效、稳定…

Java数据脱敏

数据脱敏 敏感数据在存储过程中为是否为明文, 分为两种 落地脱敏: 存储的都是明文, 返回之前做脱敏处理不落地脱敏: 存储前就脱敏, 使用时解密, 即用户数据进入系统, 脱敏存储到数据库中, 查询时反向解密 落地脱敏 这里指的是数据库中存储的是明文数据, 返回给前端的时候脱…

电阻屏和电容屏

目录 一、电阻屏 1.欧姆定律 2.电阻屏原理 &#xff08;1&#xff09;测量 X 坐标 &#xff08;2&#xff09;测量 Y 坐标 3.电阻屏数据 二、电阻屏 1.原理 2.电容屏数据 &#xff08;1&#xff09;Type A &#xff08;2&#xff09;Type B 3.电容屏的实验数据 一、…

Jira实践案例分享:小米集团如何通过API请求优化、数据治理与AI智能客服等,实现Jira系统的高效运维

日前&#xff0c;Atlassian中国合作伙伴企业日活动在上海成功举办。活动以“AI协同 创未来——如何利用人工智能提升团队协作&#xff0c;加速产品交付”为主题&#xff0c;深入探讨了AI技术在团队协作与产品交付中的创新应用与实践&#xff0c;吸引了众多业内专家、企业客户及…