python实现与Oracle数据库交互操作示例
目录
- 1、安装准备
- 2、instantclient的安装说明
- 3、instantclient安装步骤
- 4、还有几个需要注意的地方
- 1)设置NLS_LANG环境变量:解决中文乱码
- 2)关于TNS_ADMIN环境变量的说明
- 3)关于python中,cx_Oracle驱动包的安装
- 5、python操作Oracle数据库
- 1)python连接数据库的3种方式
- 2)查询数据…查
1、安装准备 ① 正确安装好Oracle数据库(我的电脑是64位的,但是我最开始安装的是Oracle32。因此,你要是有64位的安装包,你就安装64位的。)
② 正确安装好python(注意:这个最好是安装64位的,使用32位的python操作Oracle数据库,会出现很多问题。)
③oracle数据库客户端instantclient下载安装和环境变量配置(注意:现在电脑一般都是64位的,由于python安装的是64位的,因此instantclient也是安装64位的。)
注意:需要Oracle安装包,可以留言说明!!!
2、instantclient的安装说明 instantclient下载地址:https://www.jb51.net/database/572638.html
版本选择:你可以选择版本11或者版本12这样的高版本,进行下载即可。
3、instantclient安装步骤 ① 下载好instantclient后,进行解压;
文章图片
注意:这个解压位置不要随便放置,而是放在Oracle安装目录下的product目录下(这个放在product的直接子目录下。)
文章图片
② 配置instantclient的环境变量;
文章图片
③ 将instantclient解压目录下的oraociei11.dll、oraocci11.dll、oci.dll文件复制到python安装目录的Lib/site-packages下;
instantclient的解压目录:
文章图片
python安装目录下的Lib/site-packages目录:
文章图片
4、还有几个需要注意的地方
1)设置NLS_LANG环境变量:解决中文乱码
当读取的Oracle数据库中的某张表中含有中文,就会出现中文乱码的问题,因此需要我们设置这个环境变量,来解决Oracle中的中文乱码问题。
NLS_LANG,全称是National Language Support(NLS),它是一个环境变量 ,用于定义语言,地域以及字符集属性。对于非英语的字符集 ,NLS_LANG的设置就非常重要。
① 直接在Windows中的CMD黑窗口中,设置NLS_LANG环境变量;
C:\Users\AA>set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
② 直接在代码中,添加代码设置NLS_LANG环境变量(常用的方式);
import osos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
注意:上面两种方式设置NLS_LANG环境变量,都仅对当前会话窗口有效,一旦关闭当前窗口,又会恢复至原来的状态,这样恰恰是我们想要的。其实,也可以永久修NLS_LANG环境变量,但是不建议这么做,因为这样会带来一系列的问题。
2)关于TNS_ADMIN环境变量的说明
??关于这个环境变量的设置,我提供一个链接供你们参考,因为目前就学习来看我还没有用到这个:
??https//www.jb51.net/article/226529.htm
3)关于python中,cx_Oracle驱动包的安装
??对于我来说,我是直接使用"pip insatll cx_Oracle"就安装成功了。
??如果你不成功,你可以使用如下链接,下载对应版本的安装包:
??https://www.lfd.uci.edu/~gohlke/pythonlibs/#cx_oracle
??如果还是不会,再提供下面一个安装说明,希望对你有帮助:
https://www.jb51.net/article/226537.htm
5、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_Oracledb = cx_Oracle.connect('scott/a123456@DESKTOP-V4LKB10:1521/orcl')
② 用户名、密码和监听分开写
import cx_Oracledb = cx_Oracle.connect("scott","a123456","192.168.2.1:1521/orcl")
③ 配置监听并连接
import cx_Oraclemoniter = cx_Oracle.makedsn('192.168.2.1',1521,'orcl')db = cx_Oracle.connect('scott','a123456',moniter)
2)查询数据…查
①
fetchone()
:一次获取一条记录import cx_Oracle# 注意:一定要加下面这两行代码,负责会中文乱码;import osos.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 osos.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_Oracleimport pandas as pdimport osos.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数据库交互操作示例】注意:由于其他操作和python操作MySQL类似,这里就不再赘述,你们可以自行下去尝试。
以上就是python实现与Oracle数据库交互操作示例的详细内容,更多关于python与Oracle数据库交互操作的资料请关注脚本之家其它相关文章!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法