文档章节

python cx_Oracle模块的安装和使用详细介绍

rootliu
 rootliu
发布于 2017/09/09 12:26
字数 1058
阅读 19
收藏 0

python cx_Oracle模块的安装和使用详细介绍

投稿:lqh 字体:[增加 减小] 类型:转载 时间:2017-02-13 我要评论

这篇文章主要介绍了python cx_Oracle模块的安装和使用详细介绍的相关资料,需要的朋友可以参考下

python cx_Oracle模块的安装

最近需要写一个数据迁移脚本,将单一Oracle中的数据迁移到MySQL Sharding集群,在linux下安装cx_Oracle感觉还是有一点麻烦的,整理一下,做个总结。

对于Oracle客户端,不只需要安装相应的python模块(这里我用了Oracle官方的python模块——cx_Oracle),还需要安装Oracle Client,一般选择Instant Client就足够了,还需要配置tnsnames.ora(当然也可以简单的通过host:port/schema访问)。

安装:

1. 首先确定版本。因为我们的Oracle数据是在是有点老,所以我选择了一个比较老的版本——Oracle Instant Client 10.2.0.4。

2. 下载instantclient-basic。下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html。这里要严重BS Oracle,居然要先注册才能下载,这也算了,关键是注册的时候,密码居然要求有数字有字母,字母还要有大小写,还必须至少8位。逼迫我搞了一个比我银行密码还要安全的密码(好吧,现在我已经忘记我填了什么了...),下basic就可以了。

?

1

$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip

3.安装配置

?

1

2

3

4

5

6

7

8

9

10

11

12

$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip

$cd instantclient_10_2

$cp * /usr/lib  #直接放到动态库搜索路径中,不需要额外的环境配置

 

$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip

$cp -rf instantclient_10_2 /opt/

$vi /etc/profile

   export ORACLE_HOME=/opt/instantclient_10_2

   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

 

$source /etc/profile

4.配置tnsnames.ora(可不用配置tns)

注意tnsnames.ora其实并不存在,是要自己创建的(这个也很恶心,我一开始以为还要安装什么东东。。),我没有使用这种方式,有兴趣的可以google一下。

 5.下载安装cx_Oracle python模块

?

1

2

3

$wget http://downloads.sourceforge.net/project/cx-oracle/5.1.2/cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm

$rpm -ivh cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm

$ls /usr/lib/python2.6/site-packages/cx_Oracle.so #有这个文件表示安装成功,根据python的位置,也可能在其他地方,自己找一下吧

6.验证及问题解决

?

1

2

$python

>>import cx_Oracle

若报错:import cx_Oracle gave ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory

表示没有找到instant client的动态库,check一下环境变量是否配置,是否生效,版本是否正确。

若报错:ImportError: ./cx_Oracle.so: undefined symbol: PyUnicodeUCS4_Decode

?

1

2

3

4

Google的信息:There is nothing wrong with Debian. Python supports two incompatible

 modes of operation for Unicode, UCS2 (the default), and UCS4. Debian uses the default,

 Redhat uses UCS4. You need to recompile the extension for UCS-2 mode

 (i.e. using a Debian installation); this would fix the undefined symbol: PyUnicodeUCS4_Decode

所以重新编译python

?

1

2

$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4

$make;make install

再次验证,终于正常import了。

使用:

1.基本连接–使用Oracle tns alias

?

1

2

3

4

5

6

7

8

9

10

connection =cx_Oracle.connect("tp/tp@ocn_test")

#查看tns alias命令

cmd>tnsping ocn_test

TNS Ping Utility forLinux: Version 9.2.0.8.0-Production on 27-SEP-201110:47:48

Copyright (c) 1997, 2006, Oracle Corporation. Allrights reserved.

Used parameter files:

/opt/……/sqlnet.ora

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL =TCP)(HOST =10.20.36.19)(PORT =1520))) (CONNECT_DATA =(SID =ocntest)))

OK (10msec)

2.用户输入密码连接

?

1

2

pwd =getpass.getpass()

connection =cx_Oracle.connect("tp",pwd,"ocn_test")

3.用户直接在Python命令中输入连接账号信息,格式如python script.py tp/tp@ocn_test

?

1

connection =cx_Oracle.connect(sys.argv[1])

4.使用Easy Connect语法,通过Drive连接数据库

?

1

2

3

connection =cx_Oracle.connect('tp','tp','10.20.36.19:1521/ocntest')

#or

connection =cx_Oracle.connect('tp/tp@10.20.36.19:1521/ocntest')

5.先使用DSN构成TNSNAME

?

1

2

tns_name =cx_Oracle.makedsn('10.20.36.19','1521',' ocntest ')

connection =cx_Oracle.connect('tp','tp',tns_name)

6.登陆as SYSDBA

?

1

2

3

connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSDBA)

#or as SYSOPER

connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSOPER)

在Linux服务器执行Oracle操作时报了一个错误:

?

1

TNS:listener does not currently know of service requested in connect descriptor

解决方式:

问题分析见http://ora-12514.ora-code.com/,一番折腾,最后使用第5种连接方式,瞬间解决此问题。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本文转载自:

共有 人打赏支持
rootliu
粉丝 4
博文 281
码字总数 2796
作品 0
海淀
数据库管理员
私信 提问
Python学习之 cx_Oracle学习记录 一

今天开始正式学习Python,正好在学Oracle,刚好结合在一起把cxOracle学习了。 对了这哥们有一个教python的网站,我在上面也学了学 地址: http://www.liaoxuefeng.com/wiki/001374738125095c...

卜星星
2015/03/13
0
0
Python2.7 源码编译并集成第三方python模块

由于redhat5的python版本比较低,很多新的第三方python包及新功能都无法使用,所以需要升级系统自带python版本,打算升级到python2.7.4,并集成进去一些业务常用的第三方模块。 python安装 ...

China_OS
2014/09/16
0
0
mac上安装python3的cx_Oracle数据库驱动

问题 使用Python3 for mac上面的cx_Oracle数据库驱动 步骤 下载Oracle的Instant Client 程序包 Instant Client 下载适用于 Mac OS X (Intel x86) 这里版本的选择,应该根据你访问的oracle库的...

亚林瓜子
2018/08/03
0
0
cx_Oracle ORA-24315: 非法的属性类型

最近需要在本机(win)链接oracle数据库(linux)做数据移植,但是使用python中的cx_Oracle模块链接时,报错: cx_Oracle.DatabaseError: ORA-24315: 非法的属性类型 从网上查了一下,说是因...

北方攻城师
2013/11/08
0
0
Zabbix监控Oracle 连接数

监控Oracle 连接数 使用python脚本编写脚本,监控oracle连接数;连接Oracle需要安装cx_Oracle模块,安装完成后检查是否正常,没有任何信息返回即正常; 通常,还需要加载oralce的客户端配置环...

巴利奇
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象接口多态

第3天 面向对象 今日内容介绍  接口  多态  笔记本案例 今日学习目标  写出定义接口的格式  写出实现接口的格式  说出接口中成员的特点  接口和抽象类的区别  能够说出使用多...

stars永恒
8分钟前
1
0
摄像头基础介绍

一、摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中...

天王盖地虎626
8分钟前
1
0
浅谈一致性Hash原理及应用

在讲一致性Hash之前我们先来讨论一个问题。 问题:现在有亿级用户,每日产生千万级订单,如何将订单进行分片分表? 小A:我们可以按照手机号的尾数进行分片,同一个尾数的手机号写入同一片/...

Java干货分享
31分钟前
2
0
React SSR样式及SEO的实践

前一篇主要记录了一下SSR配置以及结合Redux的使用。这里简单说一下React SSR中样式处理和更优雅的SEO SSR样式 在React客户端渲染,添加样式很容易。写一个css样式文件,在对应组件中引用。标...

前端小攻略
37分钟前
5
0
华为手机太猛!余承东吹的牛今天都实现了

华为是世界上少有的在2B和2C领域同时取得成功公司。如今,华为消费者业务的营收,已经在华为总营收中占据“半壁江山”。 12月27日,华为董事长郭平在新年致辞中披露,预计2018年华为预计实现...

linux-tao
48分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部