当前位置: 首页 > Linux系统, Python, SQL > 正文

python连接Oracle数据库

一般情况下,如果要连接Oracle数据库都需要安装Oracle数据库客户端,但是毕竟客户端还是比较笨重的(500多M)。在客户端下一般使用sqlplus连接。好在Oracle官方提供了各种语言的Oracle数据库连接的InstantClient,所以只需要下载对应版本的InstantClient即可,相关下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

考虑到跨平台使用,而我本人有对python比较熟悉,所以打算使用python连接Oracle数据库。关于Linux的Oracle的安装可以参考这里链接:

Linux上Oracle 11g安装步骤图解

下面是简单的安装配置过程以及简单的python连接Oracle数据库的操作教程:

一、安装Oracle提供的InstantClient

Oracle官方网站下载对于版本的Oracle数据库的InstantClient。下载这里需要的三个安装文件:instantclient-basic-linux文件、instantclient-sdk-linux文件和instantclient-sqlplus-linux(注意:为保证不出现错误,建议还是安装上第三个文件sqlplus,我之前没有安装就导致了错误。注意还要对应系统版本)。这里我选的是:instantclient-basic-linux.x64-11.2.0.4.0.zipinstantclient-sdk-linux.x64-11.2.0.4.0.zipinstantclient-sqlplus-linux.x64-11.2.0.4.0.zip 。新建目录(这里我默认放在/opt/oracle/下),解压上面三个文件,它们会解压到当前目录的instantclient_11_2/下。在该目录下新建lib目录,并把当前目录下的所有文件cp(不是目录)到lib下

mkdir -p /opt/oracle && cd /opt/oracle

unzip instantclient-sdk-linux.x64-11.2.0.4.0.zip
unzip ipinstantclient-basic-linux.x64-11.2.0.4.0.zip
unzip instantclient-sqlplus-linux.x64-11.2.0.4.0.zip

cd ./instantclient_11_2/ && mkdir lib && cp ./* ./lib

添加Oracle的监听配置文件:listener.ora、sqlnet.ora、tnsnames.ora。在上面的instantclient_11_2/目录下创建目录 /network/admin/,在创建的admin/目录下新建上面上三个文件(实际上这个文件是没有的,需要手动创建):

listener.ora文件:

# listener.ora Network Configuration File: /opt/oracle/instantclient_11_2/network/admin/listener.ora
#
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /opt/oracle/instantclient_11_2) //配置本地客户端路径:$ORACLE_HOME
      (PROGRAM = extproc)
    )
  )

SERVER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) //配置本地HOST,本机IP或主机名、端口
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) //同上
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

sqlnet.ora文件:

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES = (NTS)

tnsnames.ora文件:

ORCL =   //这里是数据库实例名(大写)
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 222.xx.xx.xx)(PORT = 1521)) //配置Oracle服务器IP和端口
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl) //数据库实例名
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

添加环境变量。为使所有用户都能够使用,这里添加到系统的全局环境变量中。在/etc/profile中添加下面三行环境变量:

export ORACLE_HOME=/opt/oracle/instantclient_11_2
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib
export ORACLE_SID=orcl

更新该文件。至此就可以使用sqlplus做连接测试了,当然服务器端也需要简单的配置下监听程序以配合客户端连接。

source /etc/profile 
cd $ORACLE_HOME
./sqlplus system/hehe@orcl //连接测试

二、安装Python 连接Oracle的cx_Oracle

cx_oracle是一个支持Python连接Oracle数据库的扩展模块,可以访问Oracle数据库和符合Python数据库API规范。在Python官方文档上有关于cx_Oracle更多详细的说明:https://pypi.python.org/pypi/cx_Oracle 在此下载cx_Oracle的python安装源码包(在此说明下,由于大多数linux没有上面第一步安装InstantClient,所以当使用pip install 时会报错的!)。现在就可以源码安装cx_Oracle模块了:

安装一些必要的环境:

apt-get install python-dev build-essential libaio1

解压源码并进入其目录:

python setup.py build && python setup.py install

至此,cx_Oracle的Python扩展模块算是安装完成了。ps:在执行完第一步后其实就可以使用pip install cx_Oracle安装了的。另外,在安装时遇到各种问题,常见的就是下面的问题:

ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory

结合网上一大堆的解决方案,基本可以确定是由于环境变量的问题,所以还是建议大家安装上面的方法安装,基本不会出现很大问题。

三、Python对Oracle数据库的基本操作

在上面下载的cx_oracle源码包中有很多关于python操作Oracle的样例代码。下面只做简单的操作说明,基本的操作流程如下:

1.引用模块cx_Oracle

2.连接数据库

3.获取cursor

4.使用cursor进行各种操作

5.关闭cursor

6.关闭连接

下面是一个简单的例子:

import cx_Oracle                                          #引用模块cx_Oracle
conn=cx_Oracle.connect('system/hehe@orcl')    #连接数据库
c=conn.cursor()                                           #获取cursor
x=c.execute('select * from v$version')                   #使用cursor进行各种操作
x.fetchone()
c.close()                                                 #关闭cursor
conn.close()                                              #关闭连接


这篇博文由 s0nnet 于2015年12月24日发表在 Linux系统, Python, SQL 分类下, 欢迎你在下面发表评论
如无特别说明,计算机技术分享发表的文章均为原创,欢迎大家转载,转载请注明: python连接Oracle数据库 | 计算机技术分享
关键字: ,

python连接Oracle数据库:等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter