环境asinnux4.5 ,相当于centos6.x或redhat6.x
oracle11g, python3.6.8
下载了3个软件,软件版本的匹配时关键。 64位的。
oracle客户端工具。 oracle-instantclient向下兼容,也就是 12.2或更高版本,能够连接oracle11g的server。
问题:
1: 我为什么用instantclient12.2而不用instantclient11, 是因为 cx-oracle6.x ,只能搭配instantclient12.2以上。 亲测过。
2: python-cx_oracle与cx_oracle可能重了,但也没办法,因为我的python环境用了virtualenv隔离。rpm没法装在我的隔离环境,pip xxx.whl可以装在隔离环境。
安装过程:
一、
1、打开shell终端
rpm -ivh oracle-instantclient12.2xxxxx
rpm -ivh python-cx_oracle-xxxx
2、进入python我自己的运行环境virtualenv
(py368) [root@localhost py368]# pip install cx_Oracle6.1xxxx .whl
安装cx_oracle
3、测试cx_oracle是否成功
python>> import cx_Oracle
不报错就成功
二、设置
1、设置lib路径
vim /etc/profile
增加如下两行
export ORACLE_HOME=/usr/lib/oracle/12.2/client64/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
使修改生效
#activate /etc/profile
2、解决xc_Oracle的 dpi-1047问题, load libclntsh.so
(py368) [root@localhost py368]# vim /etc/ld.so.conf (py368) [root@localhost py368]#
插入一行:
/usr/lib/oracle/12.2/client64/lib
修改完后,执行ldconfig,使修改生效
(py368) [root@localhost py368]# ldconfig
测试确认
测试代码:test.py
import cx_Oracle as db import os os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' def queryOracle(sql): username = "cjxs" passwd = "Tgds_901" host = "172.18.35.200" port = "1521" sid = "jcqzdb" dsn = db.makedsn(host, port, service_name=sid) con = db.connect(user=username, password=passwd,dsn= dsn) cur = con.cursor() cur.execute(sql) result = cur.fetchall() cur.close() con.close() return (result) if __name__=="__main__": sql = "select * from qzk_cjxs.test" #dual rows = queryOracle(sql) for row in rows: print (row[0],row[1])
测试成功:
自己在代码里面写dsn, 就不用去 instantClient中设置 tnsnames.ora的相关连接字符串了。非常方便。
测试成功, 不确定性是造成焦虑的主要原因,自己做一遍,测通了,以后就好了。
相关安装包,保存到自己的百度网盘 python3.6_asinnux4.5_oracle11g软件包
参考并下载软件的网站如下:
https://blog.karky7.com/2017/04/gentoodjangooracle-database-11g.html
https://oracle.github.io/odpi/doc/installation.html#linux
https://blogs.oracle.com/linux/cx_oracle-rpms-have-landed-on-oracle-linux-yum-server
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html