python连接oracle
客户端环境: 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
- 连接信息填写错误, 比如sid填写错误:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor