一、安装Oracle客户端

1、下载对应安装文件,官网地址:http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html

这个是我自己下载好的:https://pan.baidu.com/s/10vbwHkvOrYRH3ewdkBuioQ

2、把下载好的文件放到Linux中

3、执行安装命令,因sdk包下的是压缩文件,所以直接解压放在安装目录,默认安装目录是/usr/lib/oracle/下

rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
rpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

4、设置环境变量

(1)编辑root用户下的profile文件

vi /etc/profile

(2)在文件的最后添加以下内容

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG='simplified chinese_china'.ZHS16GBK
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH 

(3)执行source命令,使配置文件生效

source /etc/profile

二、安装cx_Oracle

ps:我是用pip安装的,因刚开始用非pip方式安装时,遇到如下错误,当时查了半天资料,说什么的都有,有说是Oracle的path配置不对,试过,好像没管用,具体没深究。

http://sourceforge.net/projects/cx-oracle/files/ cx_ORacle   旧版下载地址
https://pypi.org/project/cx_Oracle/#history cx_Oracle     新版下载地址

find / -name 'cx_Oracle.so' -print      --查找文件命令
rpm -qa | grep -i cx_Oracle               --查看安装的cx_Oracle得rmp
rpm -e cx_Oracle-5.1.2-1.x86_64     --卸载rmp

Traceback (most recent call last):
File "setup.py", line 187, in <module>
raise DistutilsSetupError("cannot locate Oracle include files")
distutils.errors.DistutilsSetupError: cannot locate Oracle include files

1、安装Python 的pip

(1)、下载文件,需要网络,也可以提前下载,放到指定目录。

wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate

(2)、执行安装

python get-pip.py

2、用pip安装cx_Oracle

(1)、安装cx_Oracle之前需要先建立一个链接libclntsh.so,如下:

cd /usr/lib/oracle/11.2/client64
ln -s libclntsh.so.11.1 libclntsh.so

(2)、执行安装

pip install cx_Oracle

(3)、测试,导入import cx_Oracle不报错,即说明安装成功,然后再测试连接数据库

import cx_Oracle
import cx_Oracle

conn = cx_Oracle.connect('jhinno/jhinno@192.168.0.188/jhinno')
cursor = conn.cursor ()
cursor.execute ("select sysdate from dual")
row = cursor.fetchone ()
print row
cursor.close ()
conn.close ()

三、封装的简单的类

#!/usr/bin/env python
#coding:utf-8

import cx_Oracle

#查询数据库
def sqlSelect(sql,db,*params):
    cr=db.cursor()
    cr.execute(sql,*params)
    rs=cr.fetchall()
    cr.close()
    return rs
#增、删、改
def sqlDML(sql,db,*params):
    cr=db.cursor()
    cr.execute(sql,*params)
    cr.close()
    db.commit()

#批量插入
def sqlInsertSelect(sql,db,params):
    cr=db.cursor()
    cr.executemany(sql,params)
    cr.close()
    db.commit()

if __name__ =='__main__':
    #查询数据1
    empno="in ('7369','7499','7521')"
    sql="select * from scott.emp a where a.empno %s" %empno
    rows=db.sqlSelect(sql, cx_Oracle.connect('scott/scott@192.168.1.12:1521/orcl'))

    #查询数据2
    #params = {'empno':'7499'}
    #sql="select * from scott.emp a where a.empno in:empno"
    #rows=db.sqlSelect(sql, cx_Oracle.connect('scott/scott@192.168.1.12:1521/orcl'), params)

    for row in rows:
        print row

    #批量插入数据(将查询的scott.emp数据插入到与之表结构一样的另一张表scott.emp_test)
    sql="insert into scott.emp_test VALUES(:1,:2,:3,:4,:5,:6,:7,:8)"
    db.sqlInsertSelect(sql,cx_Oracle.connect('scott/scott@192.168.1.12:1521/orcl'),rows) 

    #删除
    empno="in ('7369','7499','7521')"
    sql="delete from scott.emp a where a.empno  %s" %empno
    db.sqlDML(sql, cx_Oracle.connect('scott/scott@192.168.1.12:1521/orcl')) 

    #修改
    empno="in ('7369','7499','7521')"
    value='IT'
    sql="update scott.emp a set a.job= %s where a.empno %s" %(value,empno)
    db.sqlDML(sql, cx_Oracle.connect('scott/scott@192.168.1.12:1521/orcl')) 

最新文章

  1. Docker学习笔记第一章:补充
  2. Google perf tools for nginx
  3. c# 中模拟一个模式匹配及匹配值抽取
  4. UVA 507 - Jill Rides Again 动态规划
  5. text-size-adjust的值为100% 代替值 none
  6. 深入浅出数据结构C语言版(7)——特殊的表:队列与栈
  7. 【BZOJ】2190 [SDOI2008]仪仗队(欧拉函数)
  8. 使用numpy实现批量梯度下降的感知机模型
  9. DNS 域名系统的简介
  10. BZOJ_1485_[HNOI2009]有趣的数列_卡特兰数
  11. equals方法中变量在前和在后的区别
  12. 禁用ViewPager的滑动事件
  13. 基于tcp协议下粘包现象和解决方案,socketserver
  14. webpack处理媒体文件(图片/视频和音频)
  15. Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)
  16. nginx lua模块安装
  17. .net使用QQ邮箱发送邮件
  18. 编译安装 Hue
  19. zabbix3.0通过yum安装笔记
  20. Python3 Tkinter-Text

热门文章

  1. MapReduce Design Patterns(chapter 3 (part 1))(五)
  2. [EffectiveC++]item13:Use objects to manage resources(RAII)
  3. [EffectiveC++]item07:declare destructors virtual in polymorphic base class
  4. SpringBoot 中解决跨域请求
  5. ssh整合之Session延迟加载问题的解决
  6. css根据屏幕大小切换样式
  7. SOJ 1085 SCU 简单计算几何
  8. linux 根据端口号查看占用进程的pid
  9. eclipse主题皮肤设置
  10. [LuoguP1363]幻想迷宫