目前有需要使用Oracle数据库中的数据,但平常接触较少,目前系统居于MySql的,为了使用方便统一,所以需要通过编写脚本,实现将Oracle中的数据同步到Mysql数据库中。借助Python语言,通过cx-Oracle连接数据库。
平常的开发在Windows环境中,系统运行环境在Ubuntu中,所以2个环境下都安装了cx-Oracle。记录一下安装的过程,安装基于Python2.7 + Oracle 11g客户端,OS是Windows10 64位、Ubuntu16.04。
首先安装配置时,必须把握一个点,就是版本一致! 包括:系统版本,Python版本,Oracle客户端的版本,cx_Oracle的版本,然后安装配置就容易了!
目前运行的各版本如下:
Python版本:Python2.7 32bit;
cx_Oracle的版本:cx_Oracle-5.3-11g.win32-py2.7
oracle客户端的版本:instantclient_18_5_32bit;
Windows环境
- 下载地址:https://pypi.python.org/pypi/cx_Oracle/5.3 下载低版本cx_Oracle版本,我是下载cx_Oracle-5.3-11g.win32-py2.7,下载后直接双击安装,就ok了。
不建议直接使用pip install cx_Oracle命令安装,因为安装的很有可能是最新版本,容易引起版本兼容问题。
- 下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html, 将instantclient目录下的所有*.dll文件拷贝到Python27\Lib\site-packages目录下
全部拷贝可以解决cx_Oracle连接Oracle数据库的时候报错:cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
- 测试
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/python
# -*- coding: UTF-8 -*-
import cx_Oracle
conn = cx_Oracle.connect('用户名/密码@主机ip地址/orcl')
curs=conn.cursor()
sql="select * from Table where ..."
rr=curs.execute (sql)
row=curs.fetchone()
print(row[0])
curs.close()
conn.close()
|
Ubuntu环境
- 下载链接:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html, 下载 instantclient-sdk-linux.x64-11.2.0.4.0.zip和instantclient-basic-linux.x64-11.2.0.4.0.zip,解压后放到同一个文件夹下,命名为 instantclient_11_2
-
执行一下命令行
export ORACLE_HOME=/path-to_this/instantclient_11_2
cd $ORACLE_HOME
ln -s libclntsh.so.11.1 libclntsh.so
-
打开/etc/profile 文件,添加下面2行
export ORACLE_HOME=/location/of/your/files/instantclient_11_2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
-
使修改生效
source /etc/profile
-
遵循python版本,使用pip安装
pip install cx_Oracle
-
在python中引用,如下截图显示,则说明安装成功