wkt's blog
非学无以致疑,非问无以广识

python连接oracle

admin~2018年8月13日 /其他/笔记

客户端环境: window server x64 + python3.6
oracle服务器版本: 10.2.*
用到的python第三方包: cx-oracle
主要参考: http://cx-oracle.readthedocs.io/en/latest/installation.html#id3

安装cx_Oracle

使用Python的Pip 包从PyPI安装cx_Oracle :

python -m pip install cx_Oracle --upgrade

配置Oracle Instant Client

下载“Basic” 即时客户端

在官网64位的即时客户端下载页面中,根据服务器版本, 下载对应的“Basic” 或者 “Basic Light”(注:带有Light的版本不支持中文)。
比如, 我们的服务器的Oracle Database版本是10.2.*, 则需要下载使用instantclient-basic-windows.x64-11.2.0.4.0。 客户端-服务端对应关系图(图片来源

客户端-服务端对应关系图

此外还需安装环境依赖:
– 对于Instant Client 18或12.2安装VS 2013
– 对于Instant Client 12.1安装VS 2010
– 对于Instant Client 11.2,请安装VS 2005 64位或VS 2005 32位

本次只需要安装VS 2005 64位,但是我全部安装了。

将下载的文件解压到某个文件夹并加入到环境变量

将下载的instantclient-basic-windows.x64-11.2.0.4.0解压到一个文件夹, 比如C:\tools\instantclient_11_2, 并将该路径加入到环境变量。

复制指定文件到python/lib/site-packages

本机测试多次并不需要这步, 网上好多人说需要。但是如果执行了这步请将环境变量C:\tools\instantclient_11_2放到python文件夹的环境变量之前,也可以放到第一位。
将以下文件复制到python安装目录下的lib/site-packages

oci.dll
ocijdbc11.dll
oraocci11.dll
oraocci11d.dll

执行python连接

import cx_Oracle   
username = ''
userpwd = ''
host = ''
port = '1521'
sid = 'airtransport'


def connect_oracle_dsn(host, port, user, passwd, sid):
    """
    dsn方式连接oracle
    """
    dsn = cx_Oracle.makedsn(host, port, sid)
    connection = cx_Oracle.connect(user, passwd, dsn)
    return connection


if __name__ == '__main__':
    connection = connect_oracle_dsn(host, port, username, userpwd, sid)
    print(connection.version)
    connection.close()

常见问题

DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

发表评论

电子邮件地址不会被公开。