Python连接Oracle的一些坑以及出现原因和解决方法
前两天公司需要, 我用Python通过Oracle客户端instanceclient对接Oracle,遇到了一些问题:
提前一个小问题:
Python连接Oracle需要一个第三方库:cx_Oracle 而这个库直接pip3 install 安装不了, 或者即使安装上了,也会版本不对,所以这就需要去pipy官网上去下载与你的系统,python对应版本位数的cx_Oracle
下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/
因为我的系统和Python都是64位,Python是3.6版本 所以下载红色标记出来的这个版本, 下载到你的Python安装包下面的Lib下面的site-pakeage(pakeage好像拼错了, 无所谓), 接着在site-pakeage目录下打开dos命令行, pip3 install cx_Oracle_7.3.0_cp36。。。.whl就能安装上了
问题一:
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "D:\pi_sql\pl_sql\instantclient_11_21\instantclient_11_2\oci.dll is not the correct architecture
简单来说就是: cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: oci.dll is not the correct architecture
原因:遇到这个问题, 没别的原因, 就是你Oracle客户端instanceclient, 系统, Python 三者版本位数不对应,我的原因是我系统和Python都是64位,而Oracle客户端instanceclient别人给我的是32位, 所以怎么着都不行, 后来又给我64位的客户端 就行了
解决方法: 把原来的instanceclient卸载了,选择一个明确与你的系统, Python版本尾数相同的Oracle客户端instanceclient, Python和系统版本好查看, instance客户端不好查看
查看Python版本:
查看系统版本:右击计算机------->属性 往下找:
我的系统和Python都是64位, 那就确定是客户端instanceclient版本位数不对, 所以卸载原来的, 下一个明确是64位的instanceclient客户端就好了
问题二:
Python 连接 Oracle 数据库时报错: 64-bit Oracle Client library cannot be loaded:
原因:是因为你没有配置环境变量, 将你instanceclient客户端中oci.dll所在的目录路径添加到华宁变量path中就好了
我的路径是这样:
添加到环境变量path中就好
问题三:
cx_Oracle.DatabaseError: ORA-12560: TNS: 协议适配器错误
原因:你连接Oracle的时候, 没有写入用户名密码和端口
就像这样, 就会报这个错误:
加上你的用户名密码端口就好了:
问题四:
cx_Oracle.DatabaseError: ORA-12170: TNS: 连接超时
原因:如果你是本地Oracle这样, 这个网上一搜一大把解决办法。而我的Oracle是在公司服务器上的, 所以需要公司的内网, 我连接超时的原因只是我忘了插公司的网线............