python连接oracle的插件,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

1

2

3

4

5

6

7

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

unzipinstantclient-sdk-linux.x64-11.2.0.4.0.zip

unzipipinstantclient-basic-linux.x64-11.2.0.4.0.zip

unzipinstantclient-sqlplus-linux.x64-11.2.0.4.0.zip

cd./instantclient_11_2/&&mkdirlib&&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))

)

)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# 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)

1

2

3

4

5

# 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)

)

)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

1

2

3

exportORACLE_HOME=/opt/oracle/instantclient_11_2

exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib

exportORACLE_SID=orcl

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

source /etc/profile

cd $ORACLE_HOME

./sqlplus system/hehe@orcl //连接测试

1

2

3

source/etc/profile

cd$ORACLE_HOME

./sqlplussystem/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

1

apt-getinstallpython-devbuild-essentiallibaio1

解压源码并进入其目录:

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

1

pythonsetup.pybuild&&pythonsetup.pyinstall

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

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

1

ImportError:libclntsh.so.11.1:cannotopensharedobjectfile:Nosuchfileordirectory

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

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

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

1.引用模块cx_Oracle

2.连接数据库

3.获取cursor

4.使用cursor进行各种操作

5.关闭cursor

6.关闭连接

下面是一个简单的例子:

Python

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() #关闭连接

1

2

3

4

5

6

7

importcx_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()#关闭连接

你可能感兴趣的:(python连接oracle的插件,python连接Oracle数据库 | 独木の白帆)