Windows系统安装cx_Oracle,安装小记

By admin in 编程 on 2019年5月7日

1.Python安装cx_Oracle模块须求设置Oracle,并在景况变量中增添Oracle的路线。

Python cx_Oracle 安装小记

SQLAlchemy 是 Python 中用来操作数据库的二个利器,帮助MySQL、Oracle、PostgreSQL、SQLite、Oracle。使用 SQLAlchemy 来保管 Oracle
的多寡需求安装倚重 cx_Oracle。在那进程中碰着多数难题,记录如下。

 

 

现行反革命也足以经过 pip install cx_Oracle 安装

 

Windows

安装 cx_Oracle 准确版本,须求区分 10g, 1一g,安装
instantclient_11_二(请到 Oracle 官方网址下载)

 

问题

ImportError: DLL load failed: 找不到钦定的模块。

将 instantclient_11_2所在的目录加多随地境变量,不过意况变量有时没有登时生效

,能够复制 oci.dll(版本也要科学)到 \Python27\Lib\site-packages
目录下

 

此刻又冒出难题

 

Unable to acquire Oracle environment handle,

复制 oci.dll 依赖的 dll,oraociei11.dll,ocijdbc11.dll 到
\Python27\Lib\site-packages 目录下。假诺不清楚就将
instantclient_11_二 目录下的 dll 都复制到
\Python27\Lib\site-packages 目录下

 

能够参照:

 

# UNIX

libclnstsh.so.10.1

编程,libnnz10.so

libociei.so

 

# Windows

oci.dll

oraociei10.dll

orannzsbb10.dll

Linux

# 先安装 rpm

yum install rpm

# oracle-instantclient-basic-10.2.0.3-1.x86_64.rpm 请到 Oracle
官方网站下载

rpm -ivh oracle-instantclient-basic-10.2.0.3-1.x86_64.rpm

rpm -ivh cx_Oracle-5.1.2-10g-py27-1.x86_64.rpm 

# 有这么些文件表示安装成功,依据 python 的地方,也可能在任哪个地方方

ls /usr/lib/python2.7/site-packages/cx_Oracle.so 

问题 1

import cx_Oracle

   Traceback (most recent call last):

     File “<stdin>”, line 1, in <module>

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

The problem is that the just installed libraries of the Oracle Instant
Client aren’t part of the default library path of your CentOS
installation. Either you have to extend the LD_LIBRARY_PATH Bash
variable of your current user or you have to add the lib directory of
the Instant Client installation to the system-wide library path if all
users should be allowed to use the Oracle Instant Client. To do so you
have to create a new file, e.g. oracle.conf, in the /etc/ld.so.conf.d
directory with the following content:

 

vim /etc/ld.so.conf.d/oracle.conf

添加

 

/usr/lib/oracle/10.2.0.3/client64/lib/

This tells ldconfig to also look for libraries in the lib folder of the
Instant Client installation. To update the library cache just call
ldconfig without any parameter. This will take a while since ldconfig
will re-read every configured library folder and add its content to the
library cache. The new oracle.conf file has to be owned by the root user
as well as ldconfig has to be called as the root user. Afterwards so
should be able to use the cx_Oracle module in your Python shell:

 

这么做之后,有时依旧出现难点。参照这里的不2诀窍,供给设置蒙受变量:

 

方法1:

export PATH

在/etc/profile文件中增多变量,该变量将会对Linux下有所用户有效,并且是“永远的”。

 

vi /etc/profile

在文件末尾加多

 

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/oracle/10.2.0.3/client64/lib

export LD_LIBRARY_PATH

就算刚才的修改霎时见效,要求执行以下代码

 

source /etc/profile

此刻再查看系统境况变量,就可以看见刚才加的事物已经生效了

 

echo $LD_LIBRARY_PATH

办法二: 直接运转export命令定义变量,只对当前shell(BASH)有效(一时半刻的)

 

export
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/oracle/10.2.0.3/client64/lib

问题 2

import cx_Oracle

ImportError: No module named cx_Oracle

倘使设置的 python 6肆 位,必要把cx_Oracle文件复制到
/usr/lib64/python贰.7/site-packages/ 目录下

 

cd /usr/lib/python2.7/site-packages/

cp cx_Oracle.so /usr/lib64/python2.7/site-packages/cx_Oracle.so

cp cx_Oracle-5.1.2-py2.7.egg-info
/usr/lib64/python2.7/site-packages/cx_Oracle-5.1.2-py2.7.egg-info

假使是 Ubuntu 系统则须求留意

 

For Debian and derivatives, this sys.path is augmented with directories
for packages distributed within the distribution. Local addons go into
/usr/local/lib/python/dist-packages, Debian addons install into
/usr/{lib,share}/python/dist-packages. /usr/lib/python/site-packages is
not used.

 

cd /usr/lib/python2.7

sudo mv site-packages/cx_Oracle* dist-packages/

sudo rmdir site-packages/

sudo ln -s dist-packages site-packages

sudo ldconfig

    

Thanks to

SQLAlchemy Oracle 的国语标题

你须求安装 NLS_LANG 情形变量,不然你读收取来的汉语大概是乱码,只怕当
insert 的数额有中文时会导致 Unicode 编码错误。

 

您能够在 Python 代码中那样设置碰着变量

 

# 设置编码,不然:

# 一. Oracle 查询出来的中文是乱码

# 二. 插入数据时有中文,会产生

# UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position
1-7: ordinal not in range(128)

os.environ[‘NLS_LANG’] = ‘SIMPLIFIED CHINESE_CHINA.UTF8’

cx_Oracle 安装小记 SQLAlchemy 是 Python
中用来操作数据库的一个利器,帮衬MySQL、Oracle、PostgreSQL、SQLite、Oracle。使用 SQLAlchemy 来保管
Ora…


2.从未有过设置Oracle的急需下载四个oci.dll的公文,并把文件的路子加多到path中。

注:本文书档案适用于Windows七 61人系统,Python二.柒 60个人。

1旦既没有设置Oracle也尚无三个path路线指向oci.dll的话正是安装了cx_Oracle也无力回天导入该模块。


一、安装cx_Oracle及相应的Oracle客户端

  1. 安装cx_Oracle,
    那么些是二个Python的扩充包,用来走访Oracle数据库的。Windows的安装文件能够到http://cx-oracle.sourceforge.net/此地去下载。
  2. 下载Oracle 陆12人客户端(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.ZHS1陆GBK。字符集查询见附录。
  3. 在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) ) )
  4. 编排测试代码:
    importcx_Oracle db_conn=cx_Oracle.connect(“user/pass@tnsname.world”)

二、安装plsql developer及其对应Oralce客户端

  1. 设置PLSQL
    Developer,那是三个Oracle可视化软件,用来操作Oracle数据库。
  2. 下载Oracle 3多少人客户端(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中。
  3. 配置tnsnames.ora文件,内容同(一、)中第3项。
  4. 起步PLSQL,在”工具”->”首荐项”->”Oralce”->”连接”中配备”Oracle主目录名”为’D:\PLSQL\instantclient_11_2_32’和”OCI库”为’D:\PLSQL\instantclient_11_2\oci.dll’。
  5. 在”工具”->”首推项”->”Oracle”->”登入历史”中配备”固定用户”,格式为”用户名/密码@数据库名称”,如:”test/test@TESTDB”

三、大概会遇见的bug及消除措施

  1. 固然只设置Oracle 310个人客户端(Oracle Instant
    Client),PLSQL能够健康使用,可是cx_Oracle会报错,内容如下:
    import cx_Oracle Traceback(most recent call last): File"",line1,in ImportError:DLL load failed:%1不是有效的Win32应用程序。
    涸泽而渔措施:
  • 安装陆拾3位的oracle client,上述(壹)(2)中描述的即为此办法。
  • 拷贝二个610人的 oci.dll 到%python_home%\Lib\site-packages 下

四、附录

  1. 数据库字符集查询:select * from nls_database_parameters
  2. 客户端字符集查询:select * from nls_instance_parameters
  3. 会话字符集:select * from nls_session_parameters* 或 *select *
    from
    v$nls_parameters,如无特殊装置,应与nls_instance_parameters一致。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 澳门新葡亰官网app 版权所有