文档章节

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

rootliu
 rootliu
发布于 2017/09/09 12:26
字数 1058
阅读 14
收藏 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
粉丝 2
博文 249
码字总数 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库的...

亚林瓜子
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的客户端配置环...

巴利奇
08/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Mac OS X下Maven的安装与配置

Mac OS X 安装Maven: 下载 Maven, 并解压到某个目录。例如/Users/robbie/apache-maven-3.3.3 打开Terminal,输入以下命令,设置Maven classpath $ vi ~/.bash_profile 添加下列两行代码,之后...

TonyStarkSir
今天
3
0
关于编程,你的练习是不是有效的?

最近由于工作及Solution项目的影响,我在重新学习DDD和领域建模的一些知识。然后,我突然就想到了这个问题,以及我是怎么做的? 对于我来说,提升技能的项目会有四种: 纯兴趣驱动的项目。即...

问题终结者
今天
3
0
打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部