用Python操作Oracle数据库(cx_Oracle库)
一、安装cx_Oracle库
cx_Oracle驱动包的安装
pip install cx_Oracle
如果你不成功,你可以使用如下链接,下载对应版本的[安装包]
如果还是不会,再提供下面一个安装说明,希望对你有帮助
如果本机没有安装Oracle数据库,又要通过Python访问远程服务器上的Oracle,那么需要在本机上安装instantclient。安装可以从Oracle官网获取安装包,如果没有账号可以自行注册。注册完成后可以免费获取不同版本的instantclient。下载地址
1)、创建文件路径:
D:\Program Files\oracle\instantclient_11_2
将此路径添加到系统的Path中
2)、下载 instantclient 64位 放置到 1) 创建的路径下
3)、将文件中后缀为 dll 的文件复制到 anaconda 安装位置
4)、重启python
二、python操作Oracle数据库
需要注意的是:当配置好所有的东西之后,其实用python操作Oracle和操作MySQL,在写代码上基本上大同小异。
因此在学习下面的代码之前,你可以参考我之前写的python操作MySQL数剧库的文章
1)python连接数据库的3种方式
- 连接语法:cx_Oracle.connect(‘username/password@host/监听’)
- host代表你的Oracle服务器所在的地址,因为我的Oracle服务器就安装在本机上,因此我这里可以写localhost,我可以写主机名DESKTOP-V4LKB10,我还可以写主机IP
① 用户名、密码和监听写在一起
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)查询数据…查
① 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操作MySQL类似