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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】Hive

Hive 作为数仓应用工具,对比 RDBMS(关系型数据库) 有3个“不能”: 不能像 RDBMS 一般实时响应,Hive 查询延时大; 不能像 RDBMS 做事务型查询,Hive 没有事务机制; 不能像 RDBMS 做行…

Android性能优化——卡顿优化

文章目录 一、从XML到屏幕上的展示造成跳帧的因素有那些发现问题定位问题定位代码 一、从XML到屏幕上的展示 数据加载阶段 数据控制阶段 数据展示阶段 xml —> view onCreat —> 解析layout.xml resume —> view —> wms ViewRootImpl UI 绘制流程 :测…

A股探底回升,跑出惊天大阳,你们知道为什么吗?

今天的A股,探底回升,让人惊呆了,你们知道是为什么吗?盘面上出现3个重要信号,一起来看看: 1、今天A股市场炸锅了,AI人工智能、国产软件、存储芯片迎来了涨停潮,惊呆了,科技…

DataGrip 2024 mac/win版:让数据库管理更简单

JetBrains DataGrip 2024 是一款专为数据库开发者设计的集成开发环境(IDE),它凭借其卓越的性能和丰富的功能,为数据库管理提供了前所未有的便利。 DataGrip 2024 mac/win版获取 DataGrip 2024 支持几乎所有主流的关系型数据库管理系统,如 My…

Vue41 ref属性

ref属性 ref是Vue提供的获取组件的属性 <template><div><h1 v-text"msg" ref"title"></h1><button ref"btn" click"showDOM">点我输出上方的DOM元素</button><MySchool ref"sch"…

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

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

Redis报错:MISCONF Redis is configured to save RDB snapshots

错误提示内容&#xff1a; 2024-06-25 16:30:49 : Connection: Redis_Server > [runCommand] PING 2024-06-25 16:30:49 : Connection: Redis_Server > Response received : -MISCONF Redis is configured to save RDB snapshots, but it is currently not able to pers…

江协科技51单片机学习- p19 串口通信

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

算法基础精选题单 动态规划(dp)(递推+线性dp)(个人题解)

前言&#xff1a; 一些简单的dp问题。 正文&#xff1a; 题单&#xff1a;237题】算法基础精选题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/资讯_牛客竞赛OJ_牛客网 (nowcoder.com) 递推&#xff1a; NC235911 走楼梯&#xff1a; #include<bits/stdc.h> using na…

郑州大学人工智能简答

第一章 1. 什么是人工智能&#xff1f; 人工智能又称机器智能&#xff0c;主要研究人工的方法和技术开发智能机器或智能系统&#xff0c;以模仿、延伸和扩展人的智能、生物智能、自然智能&#xff0c;实现机器的智能行为。 人工智能的定义分四类&#xff1a; &#xff08;1&am…

切线与切平面的可视化

切线与切平面的可视化 flyfish 切线的可视化 import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation, PillowWriter# 定义一个简单的一元函数&#xff0c;例如 f(x) x^2 def func(x):return x**2# 计算函数的导数 def deriva…

Docker搭建ELK

docker安装ElasticSearch 创建网络 #这里先创建一个网络&#xff1a;因为我们还需要部署kibana容器、logstash容器&#xff0c;需要让这些容器互联。 docker network create elk-net#查看网络 docker network ls下载ES镜像 #搜索镜像 docker search elasticsearch #下载镜像…

【活动】搜维尔科技携Xsens邀您出席世界人工智能大会

展会介绍 由外交部、国家发展改革委、教育部、科技部、工业和信息化部、国家网信办、中国科学院、中国科协和上海市政府共同主办的世界人工智能大会&#xff08;WAIC&#xff09;&#xff0c;将于7月4日-7日在上海举行。围绕“以共商促共享 以善治促善智”主题&#xff0c;打造…

【MySQL】数据库事务详解

文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账&#xff0c;A 给 B 转账 100 块钱&…

【Linux】进程信号_3

文章目录 八、进程信号2. 信号的保存3. 信号的处理 未完待续 八、进程信号 2. 信号的保存 实际执行信号的处理动作称为信号递达(Delivery) 信号从产生到递达之间的状态,称为信号未决(Pending)。 进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产生时将保持在未决状态,直到…

6.26作业

1.整理思维导图 2.统计家目录下.c文件的个数 ls ~/*.c | wc -l 3.终端输入一个.sh文件&#xff0c;判断文件是否由可执行权限&#xff0c;如果有可执行权限运行脚本&#xff0c;没有可执行权限添加可执行权限后&#xff0c;再运行脚本 #!/bin/bash read -p "请输入一个.…

Go语言学习:每日一练1

Go语言学习&#xff1a;每日一练1 目录 Go语言学习&#xff1a;每日一练1变量声明函数定义流程控制 ifrange遍历switch 变量声明 package main//定义变量 var a 1 const Message “hello,world”func main() {b : 2 //短变量声明var c 3c TestMethod(a, b, c)} //定义函数…

基于IM948(Low-cost IMU+蓝牙)模块的高精度PDR(Pedestrian Dead Reckoning)定位系统 — 可以提供模块和配套代码

一、背景与意义 行人PDR定位系统中的PDR&#xff08;Pedestrian Dead Reckoning&#xff0c;即行人航位推算&#xff09;背景意义在于其提供了一种在GPS信号不可用或不可靠的环境下&#xff0c;对行人进行精确定位和导航的解决方案。以下是关于PDR背景意义的详细描述&#xff1…

【课程总结】Day11(中):手势图像识别实战(Vgg16和ResNet)

前言 在上一章《【课程总结】Day11&#xff08;上&#xff09;&#xff1a;手势图像识别实战(LeNet模型)》课程中&#xff0c;我们通过使用LeNet模型实现了手势识别。在本章内容中&#xff0c;我们将搭建Vgg模型和ResNet模型&#xff0c;并应用到手势识别中。 Vgg模型 Vgg简…

egg代码生成器

今天给大家分享一下egg的代码生成器&#xff0c;这个其实原理很简单&#xff0c;说白了就是用到了nodejs的一个文件io的操作&#xff0c;通过一系列配置参数解析然后生成一个很长的字符串&#xff0c;写入到文件中&#xff0c;最后导出到我们指定的文件夹。 前提概要 为什么我…