注:本文档适用于Windows7 64位系统,Python2.7 64位。
一、安装cx_Oracle及对应的Oracle客户端
- 安装cx_Oracle, 这个是一个Python的扩展包,用来访问Oracle数据库的。Windows的安装文件可以到http://cx-oracle.sourceforge.net/这里去下载。
- 下载Oracle 64位客户端(Oracle Instant Client),这个是Python扩展包所需要的。可以到http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html去下载,下载后解压到本地磁盘(例如:D:\PLSQL\instantclient_11_2_64),把路径加入到环境变量的path中。同时在系统环境变量中添加NLS_LANG,值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,以便支持中文。
注:客户端字符集要与服务器一致,才能正确显示数据库的非Ascii字符,但是语言设置可以不同,因此NLS_LANG也可以设为American_American.ZHS16GBK。字符集查询见附录。 - 在D:\PLSQL\instantclient_11_2_64\NETWORK\ADMIN添加tnsnames.oRA文件。新建一个叫tnsnames.ora的文件,内容如下:
TESTDB= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.2)(PORT=1521)) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=TESTDB) ) ) ORACLR_CONNECTION_DATA= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)) ) (CONNECT_DATA= (SID=CLRExtProc) (PRESENTATION=RO) ) )
- 编写测试代码:
importcx_Oracle db_conn=cx_Oracle.connect(“user/pass@tnsname.world”)
二、安装plsql developer及其对应Oralce客户端
- 安装PLSQL Developer,这是一个Oracle可视化软件,用来操作Oracle数据库。
- 下载Oracle 32位客户端(Oracle Instant Client),目前plsql只支持Oracle 32客户端。可以到http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html去下载。下载后解压到本地磁盘(例如:D:\PLSQL\instantclient_11_2_32),把路径加入到环境变量的path中。
- 配置tnsnames.ora文件,内容同(一、)中第3项。
- 启动PLSQL,在"工具"->"首选项"->"Oralce"->"连接"中配置"Oracle主目录名"为'D:\PLSQL\instantclient_11_2_32'和"OCI库"为'D:\PLSQL\instantclient_11_2\oci.dll'。
- 在"工具"->"首选项"->"Oracle"->"登录历史"中配置"固定用户",格式为"用户名/密码@数据库名称",如:"test/test@TESTDB"
三、可能会遇见的bug及解决方法
- 如果只安装Oracle 32位客户端(Oracle Instant Client),PLSQL可以正常使用,但是cx_Oracle会报错,内容如下:
import cx_Oracle Traceback(most recent call last): File"",line1,in ImportError:DLL load failed:%1不是有效的Win32应用程序。
解决方法:
- 安装64位的oracle client,上述(一)(二)中描述的即为此方法。
- 拷贝一个64位的 oci.dll 到%python_home%\Lib\site-packages 下
四、附录
- 数据库字符集查询:select * from nls_database_parameters
- 客户端字符集查询:select * from nls_instance_parameters
- 会话字符集:select * from nls_session_parameters* 或 *select * from v$nls_parameters,如无特殊设置,应与nls_instance_parameters一致。