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的直接字目录下。

python操作Oracle数据库,你学会了吗?_第1张图片

3)instantclient的环境配置

① 按照图中操作,完成环境变量的配置;

python操作Oracle数据库,你学会了吗?_第2张图片

② 将其解压目录下的oraociei11.dll、oraocci11.dll、oci.dll文件复制到python安装目录的Lib/site-packages文件夹下;

instantclient安装包解压后的文件夹:

python操作Oracle数据库,你学会了吗?_第3张图片

python安装目录下的Lib/site-packages文件夹:

python操作Oracle数据库,你学会了吗?_第4张图片

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()

截取部分结果如下:

python操作Oracle数据库,你学会了吗?_第5张图片

② 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()

截取部分结果如下:

python操作Oracle数据库,你学会了吗?_第6张图片

③ 使用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数据库,你学会了吗?_第7张图片

◆ ◆ ◆  ◆ ◆

麟哥新书已经在京东上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前京东正在举行100-50活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:

python操作Oracle数据库,你学会了吗?_第8张图片

点击下方小程序即可进入购买页面:


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

● 麟哥拼了!!!亲自出镜推荐自己新书《数据分析师求职面试指南》

● 厉害了!麟哥新书登顶京东销量排行榜!

● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!

● 你相信逛B站也能学编程吗

点击阅读原文即可参与京东100-50购书活动

你可能感兴趣的:(数据库,乱码,adb,anaconda,git)