文档章节

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

rootliu
 rootliu
发布于 2017/09/09 12:26
字数 1058
阅读 13
收藏 0
点赞 0
评论 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
博文 233
码字总数 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
cx_Oracle ORA-24315: 非法的属性类型

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

北方攻城师
2013/11/08
0
0
Python脚本打包为exe文件

把Python脚本和所用到的库打包为exe文件,可以更方便的发布程序,避免使用程序的每个电脑都必须安装Python。 网上有不少相关介绍,但很少见到Python 3.x下打包Python脚本为exe的成功案例,笔...

Yamazaki
2012/07/17
0
0
python 安装 cx_Oracle

需要的lib库: yum install gcc libffi-devel python-devel openssl-devel 源码安装: 下载地址: https://pypi.python.org/pypi/cx_Oracle/5.2.1 安装:1. tar zxvf cxOracle-5.2.1.tar.gz......

灼灼123
06/26
0
0
Python远程连接服务器上的Oracle数据库

Python远程连接服务器上的Oracle数据库 1、正确的开启方式 在你的IPython或者是Anaconda的jupyter中输入一下代码,其中: ‘username’—— 用户名 ‘password’——密码 ‘192.168.1.1:1521/...

推荐码发放
05/04
0
0
windows下安装cx_Oracle的方法

Install cx_Oracle Use Python’s Pip package to install cxOracle from PyPI: python -m pip install cx_Oracle --upgrade This will download and install a pre-compiled binary if one ......

良言
07/09
0
0
hue(05)、Hue集成mysql、oracle等数据库

在 hue(04)、Hue集成Hive数据仓库 中我们在hue中集成hive数据仓库,替代了hive自己的hwi服务,可以很方便的在hue中进行hive的sql查询等操作。本文我们将在hue中集成mysql、oracle等数据库,这...

MaxBill
02/27
0
0
用cxfreeze打包Python3.3成exe文件

在python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller。 py2exe是这三者里面知名度最高的,但稍微复杂一点的结构就无法完美的解决更不用提py3了 cx_freeze,本次...

liaojie
2014/03/18
0
0
今天关于多个Python版本和谐同存的实践经验

由于新浪SAE使用的环境是Python2.6.7+Django1.2.7,而我的电脑使用的环境是Python2.5+Django1.2.7,为了完成今年下半年在SAE上部署一个个人博客的任务,我决定首先把开发环境搭建完毕。显然,...

炸酱面
2012/03/24
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 如果是你喜欢的女同学找你借钱

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享Michael Learns To Rock的单曲《Fairy Tale》 《Fairy Tale》- Michael Learns To Rock 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
38分钟前
9
3
NNS域名系统之域名竞拍

0x00 前言 其实在官方文档中已经对域名竞拍的过程有详细的描述,感兴趣的可以移步http://doc.neons.name/zh_CN/latest/nns_protocol.html#id30 此处查阅。 我这里主要对轻钱包开发中会用到的...

暖冰
今天
0
0
32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
11
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部