最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Win10 下使用 Python 连接 Oracle

    正文概述 掘金(drguo)   2020-12-23   772

    目录前言正文 1 cannot import name ‘SourceDistribution’2 DPI-1047: Cannot locate a 64-bit Oracle Client library3 make sure you have the 32 bits oracle client installed4 ORA-12154: TNS 前言本来以为写篇这个就够了 Python 离线安装第三方库,后来发现还有好多坑,还是全记一下吧。

    前言

    本来以为写篇这个就够了 Python 离线安装第三方库,后来发现还有好多坑,还是全记一下吧。使用 python 连接 oracle 有很多种方式,本文使用的是 cx-Oracle。此外,本文完全是在不能连外网的情况下操作的,能连外网没有这么麻烦。

    正文

    1 cannot import name ‘SourceDistribution’

    本来在 linux 上配置好了所有环境,把 python 包全拷到 windows 下后发现不能直接用,还得重新安装 cx-Oracle,如 Python 离线安装第三方库写的那样,我先用能连外网的笔记本在 pypi.org/project/cx-… 下载了 whl 包,然后传到了不能连外网的机器上,而安装时报了如下错误: pip install ImportError: cannot import name ‘SourceDistribution’

    pip install d:\xx\xx.whl
    

    查了下说是 pip 版本的问题,需要升级。 那么第一个问题来了,再使用这种方式通过有问题的 pip 离线安装升级 pip 肯定是不行的,怎么办呢? 然后我使用了 Python 离线安装第三方库中写的第三种方式,源码安装升级 pip,然后再安装 cx-Oracle。

    2 DPI-1047: Cannot locate a 64-bit Oracle Client library

    cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "D:\xx\oci.dll is not the correct architecture 查了下说是 Oracle Client 版本不对,要和 python 一致,python 是 64 位,Oracle Client 也需要是 64 位,小问题,去官网下载:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 然而坑又来了,下载需要注册 oracle 账户,注册完后登录,oracle 官网又出问题了,下载不了。

    Win10 下使用 Python 连接 Oracle

    找了半天终于在 csdn 上找到一个 64 位的,下载然后传到不能联网的机器上。然而,又出问题了,见下。

    3 make sure you have the 32 bits oracle client installed

    用 64 位替换了 32 位的 oracle 客户端后,cx-Oracle 没问题了,而 PLSQL Developer 并不支持 Oracle 64 位客户端连接,冲突了,这不是为难我胖虎吗? 还好机智的我想起来可以在 plsql 里设置 oci 库,我把它改成了 32 位的,环境变量里配置 64 位的,这样就完美共存了。

    Win10 下使用 Python 连接 Oracle

    4 ORA-12154: TNS

    cx_Oracle.DatabaseError: ORA-12154: TNS

    这个问题也有点坑,在 linux 下 ora_addr 需写成 "ip:port/orcl",而 windows 下需写成实例名,就是 tnsnames.ora 里配置的。

    Win10 下使用 Python 连接 Oracle

    例子:

    import cx_Oracle
    
    ora_name = ""
    ora_pasw = ""
    
    
    
    ora_addr = "xx-log"
    
    
    def ora_query(sql_log):
        print(sql_log)
    
        conn = cx_Oracle.connect(
            '{ora_name}/{ora_pasw}@{ora_addr}'.format(ora_name=ora_name, ora_pasw=ora_pasw, ora_addr=ora_addr))
        curs = conn.cursor()
        res = curs.execute(sql_log)
        row = res.fetchone()
        curs.close()
        conn.close()
        return row
    
    
    if __name__ == '__main__':
        res1 = ora_query("select * from ETL_JOB_STATUS t where t.etl_job='audit_fraud_outbound_d_s'")
        print res1
    

    Win10 下使用 Python 连接 Oracle

    本人有多年大数据与机器学习开发经验,并乐于总结与分享,如有侵权或写的不对的地方可以私信我,有问题也可以问我哟,free~


    起源地下载网 » Win10 下使用 Python 连接 Oracle

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元