cx_Oracle 编译安装及简单使用方法

2011/11/23 · python

cx_Oracle 是Python的一个扩展模块,提供符合Python数据库API规范的Oracle访问支持,是Python下访问Oracle的利器,不过鉴于其版本众多,很多人在安装上就遇到了障碍,我这里简单记录一下。
最普适的方法就是编译安装了,官方有详尽的安装文档,我这里基本只是翻译。

准备

首先下载两个东西:

  • cx_Oracle
  • Oracle Instant Client. Oracle官方提供的轻量客户端组件,需要同时下载 instantclient-linux-basic 和 instantclient-sdk-linux 并解压到同一目录

然后设置环境变量,最好写到profile文件里

export ORACLE_HOME=[你的解压目录]/instantclient_11_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

MAC OS X 下还需设置另一个环境变量

export DYLD_LIBRARY_PATH=$ORACLE_HOME

然后做一下软链

cd $ORACLE_HOME
ln -s libclntsh.so.x.x libclntsh.so

编译安装

接下来非常简单,进入你的cx_Oracle源码目录后执行以下两条语句就OK了

python setup.py build
python setup.py install

测试是否正常

$ python
Python 2.5.2 (r252:60911, Oct 25 2008, 19:37:28)
[GCC 4.1.2 (Gentoo 4.1.2 p1.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

没有异常的话就说明安装成功了。

简单的使用

#!/usr/bin/python
# -*- encoding: utf-8 -*-
import cx_Oracle

try:
  db = cx_Oracle.connect('username','passwd','host:port/dsn')
  cursor=db.cursor()
  cursor.execute(sql)
  #查询
  for column, in cursor:#注意只有一列的时候也要后面加','来解包
    #do something
  #取一列
  row = cursor.fetchone()
  #带名字参数的查询
  cursor.execute(
    'select * from table where id = :id ',{'id':5,})
  #按位置参数的查询
  cursor.execute(
    'select * from table where id = :1',
    (id,))#注意只有一个参数时也要加','参数是元组

  cursor.close()
  db.close()
except cx_Oracle.DatabaseError, e:
  print e
  sys.exit(2)

最后,连接默认是没有设置autocommit的,更删改的话需要commit。