python操作Oracle数据库

1. 准备工作

首先,你必须安装好Oracle数据库。Oracle数据库的安装并不是那么容易,大家可以去找一个安装教程,慢慢研究。
其次,你既然用Python操作Oracle,你必须要安装Python吧。Python的安装过程较为简单。但是有一点需要注意:一定要安装64位的Python,不要使用32位的。
最后,也是最复杂的一步。我们需要进行instantclient的下载安装和环境配置,它是oracle数据库的客户端,这个最好也是下载64位的。

2. instantclient的安装与配置

1)instantclient的下载地址

在进行instantclient的安装与配置之前,我先提供给大家一个下载链接,供大家下载,我们直接下载像11或者12这样的高版本,即可。
instantclient的下载地址:http://suo.im/5Dlqrr
2)instantclient的安装

① 直接解压instantclient安装包;
在这里插入图片描述
② 解压后的文件位置,不要随意放置;
我们需要将instantclient安装包,解压后得到的文件夹,放置在Oracle安装目录下的product的直接字目录下。
在这里插入图片描述
3)instantclient的环境配置

① 按照图中操作,完成环境变量的配置;
在这里插入图片描述
② 将其解压目录下的oraociei11.dll、oraocci11.dll、oci.dll文件复制到python安装目录的Lib/site-packages文件夹下;
instantclient安装包解压后的文件夹:
在这里插入图片描述
python安装目录下的Lib/site-packages文件夹:
在这里插入图片描述
3. 其他需要特别注意的点

1)解决中文乱码问题

当使用Python读取到Oracle数据库中的某张表,如果该表中存在中文,会出现中文乱码的问题。因此需要设置NLS_LANG环境变量,来解决这个问题,下面提供了两种方式。
① 打开CMD黑窗口,输入以下命令;

C:\Users\AA>set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

② 直接在写代码的时候,输入以下命令;

import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

注意: 上述两种方式书写命令的位置不同,不要弄错了。其次,上述设置NLS_LANG环境变量的方式,仅对当前窗口有效。其实,我们也可以永久修改NLS_LANG环境变量,但是请不要这么做。
2)关于cx_Oracle驱动包的安装,需要注意的问题

cx_Oracle是Python操作Oracle数据库,需要使用的驱动包。类似于Python操作MySQL使用的pymysql驱动包。
对于我来说,我直接使用下面这个命令,就安装成功:

pip insatll cx_Oracle

如果你的系统环境,导致安装失败,我这里提供两个链接,供你下载和学习:
cx_Oracle驱动包的下载:http://suo.im/6fGFSR
cx_Oracle安装教程:http://suo.im/5DlvxT

4. Python与Oracle交互操作

其实Python操作Oracle数据库,和Python操作MySQL数据库,基本上都是一样的道理,一通百通。我之前已经写了一个Python操作MySQL数据库的详细教程,下面提供给大家这个链接。
Python操作MySQL数据库:http://suo.im/6fGJhl
1)Python链接Oracle服务器的3种方式

① 用户名、密码和监听写在一起

import cx_Oracle
db = cx_Oracle.connect('scott/a123456@DESKTOP-V4LKB10:1521/orcl')

② 用户名、密码和监听分开写

import cx_Oracle
db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")

③ 配置监听并连接

import cx_Oracle
moniter = cx_Oracle.makedsn('192.168.2.1',1521,'orcl')
db = cx_Oracle.connect('scott','a123456',moniter)

2)Python怎么获取Oracle中的数据(查)

数据分析师日常工作用到最多的就是“查”,因此我们只讲述怎么查数据。关于其它的增删改操作,都是类似于MySQL,这里就不详细说明。
① fetchone():一次获取一条记录;

import cx_Oracle
# 注意:一定要加下面这两行代码,负责会中文乱码;
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
cursor = db.cursor()

cursor.execute('select count(*) from emp1')
aa = cursor.fetchone()
print(aa)
cursor.execute('select ename,deptno,sal from emp1')     
for i in range(aa[0]):
    a,b,c = cursor.fetchone()
    d = "我的名字叫{},所在部门是{},工资是{}美元".format(a,b,c)
    display(d)
db.close()

截取部分结果如下:
在这里插入图片描述
② fetchall():一次获取所有记录;

import cx_Oracle
# 注意:一定要加下面这两行代码,负责会中文乱码;
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
cursor = db.cursor()

cursor.execute('select ename,deptno,sal from emp1')    
aa = cursor.fetchall()
# print(aa)
for a,b,c in aa:
    d = "我的名字叫{},所在部门是{},工资是{}美元".format(a,b,c)
    display(d)
db.close()

截取部分结果如下:
在这里插入图片描述
③ 使用pandas中的read_sql()方法,将提取到的数据直接转化为DataFrame进行操作;

import cx_Oracle
import pandas as pd
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

db = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
cursor = db.cursor()

df1 = pd.read_sql("select * from emp where deptno=20",db)
display(df1)

df2 = pd.read_sql("select * from emp where deptno=30",db)
display(df2)

结果如下:
在这里插入图片描述

参考链接 :
python操作Oracle数据库 : https://mp.weixin.qq.com/s/9qE396HRqJfi8nCB6sMotQ

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值