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的安装可以参考这里链接:
下面是简单的安装配置过程以及简单的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.zip、instantclient-sdk-linux.x64-11.2.0.4.0.zip和instantclient-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() #关闭连接