如题所述,凭着折磨的精神,终于搞定。
依照这篇文章,完成了一部分,可是出现一些问题。
http://www.cnblogs.com/ddr888/archive/2010/05/16/1736990.html cx_Oracle说:Python访问Oracle并不难
原文全拿过来了。不管了,
标题很好的说明cx_Oracle的意义,但是就像Windows下访问Oracle那样麻烦一样,Debian中一样繁琐,本文将用尽量简单的过程介绍在Debian 5中Python访问Oracle,但cx_Oracle的使用请参考文档。
Python实现对Oracle的访问需要以下两个组件和一个可选组件:
Oracle Instant Client 它是Oracle提供的一个简单的访问Oracle的组件,不用安装Oracle标准客户端。
cx_Oracle 一套符合python 数据库API规范的Oracle访问组件。
alient(可选) 简单来讲,就是能把RHEL下的程序包(.rpm)和基于Debian系统中的程序包(.dpkg)相互转换的工具。
一、Oracle Instant Client安装
It is free!它提供了Oracle数据库访问的C语言接口OCI,cx_Oracle就是通过OCI访问数据库,所以如果只需要在客户端访问数据库,它就是最轻量的。注册并下载Basic包,里面有几个库文件,我们要做的是在cx_Oracle能使用OCI提供的接口,即把Basic包中的几个库文件加入Debian的共享库中。
?1
2
3 #mkdir /opt/oracle/instantclient
#cp Basic包中文件 /opt/oracle/instantclient
#vi /etc/profile
在底部加入以下指令:
?1 export LD_LIBRARY_PATH="/opt/oracle/instantclient/"
程序运行时一般会从系统默认的路径中查找共享库文件:/lib和/usr/lib。如果存在环境变量LD_LIBRARY_PATH,那么会先从这里查找库文件,有了这些库文件就可以安装cx_Oracle。
二、安装cx_Oracle
cx_Oracle是Python中访问Oracle的一个扩展组件,也是很多地方推荐的方案。但是官方网站上并没有提供基于Debian系统类型的安装包,但是有rpm包,这里可以通过alient转换rpm转换到dpkg的折中方法来安装,当然也可以源码安装。
?1
2
3 #apt-get install alient
#alient cx_Oracle-*.*.*.*.rpm
#dpkg -i cx_Oracle-*.*.*.*.dpkg
三、cx_Oracle使用
这里只介绍它的简单使用方法:
?1
2
3
4 import cx_Oracle
db = cx_Oracle.connect('username', 'pwssword', 'ip_address:1521/db_name')
print db.dsn
print db.version
小结
本文记录了Debian中Python访问Oracle数据库的cx_Oracle的设置方法,如果有其他方法的经验,欢迎讨论。
别的就不说了。说遇到的问题,一直以来我用的是ubuntu,现在 改用debian。坑啊,没注意python版本差别,我一直以为是3.3哪知道 debian python3是3.2, 郁闷
好,再一个是路径设定,要看清楚。还有就是python的搜索路径,你mm的,没包含 /usr/lib/python3.2/site-packages 。。。
放狗搜索,解决了。btw,最近google越来越难用,修墙,不要修太强啊。所谓IT人为难IT人啊。。。何必呢
上网找了很多久未果,都来我自己糊里糊涂找到了解决方法,那就是在dist-packages(即/usr/local/lib/python2.6/dist-packages)添加一个路径文件,如mypkpath.pth,必须以.pth为后缀,写上你要加入的文件名称就是了,如我的:
/home/tony/tst-python
呃。最坑的就是最后出现了一个
>>> import cx_Oracle
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libaio.so.1: cannot open shared object file: No such file or directory
这样的错误。一看,直觉告诉我,这应该是libaio包缺失。。。好吧。先找debian 郁闷 sid排在前面,继续找,找到这个网站http://pkgs.org/download/libaio,也安装了,还是没找到文件。。。
再一想,不对, 既然是 Linux-native asynchronous I/O access library 那当然在源里的。立即apt-get install libaio
呃,tab几下,你妹妹的,出现三个,选1那个安装了。世界和平了。。。。
>>> import cx_Oracle
>>> db = cx_Oracle.connect('foo/bar@127.0.0.1/bar')
<cx_Oracle.Connection to foo@127.0.0.1/bar>
>>> db.dsn
'127.0.0.1/bar'
>>> db.version
'9.2.0.1.0'