黑夜中的行者534 2022-11-16 12:09 采纳率: 66.7%
浏览 8
已结题

Python-oracledb连接数据库报错

写了一个最简单的Python,用来测试和网络内另一台Oracle数据库连接,但是一直在连接步骤报错。

代码非常非常简单,连接字串也是在其他工具里面测试过没问题的。


import oracledb

oracle = oracledb.connect(dsn="SYSADM/SYSADM@172.16.136.100:1521/HR92DMO")

报错内容看起来是连接上了对方的主机,然后就出了这个莫名其妙的错误。

C:\Users\softl\PycharmProjects\FuBoDTS\venv\Scripts\python.exe C:/Users/softl/PycharmProjects/FuBoDTS/main.py
Traceback (most recent call last):
  File "C:\Users\softl\PycharmProjects\FuBoDTS\main.py", line 3, in <module>
    oracle = oracledb.connect(dsn="SYSADM/SYSADM@172.16.136.100:1521/HR92DMO")
  File "C:\Users\softl\PycharmProjects\FuBoDTS\venv\lib\site-packages\oracledb\connection.py", line 1012, in connect
    return conn_class(dsn=dsn, pool=pool, params=params, **kwargs)
  File "C:\Users\softl\PycharmProjects\FuBoDTS\venv\lib\site-packages\oracledb\connection.py", line 135, in __init__
    impl.connect(params_impl)
  File "src\oracledb\impl/thin/connection.pyx", line 318, in oracledb.thin_impl.ThinConnImpl.connect
  File "src\oracledb\impl/thin/connection.pyx", line 206, in oracledb.thin_impl.ThinConnImpl._connect_with_params
  File "src\oracledb\impl/thin/connection.pyx", line 177, in oracledb.thin_impl.ThinConnImpl._connect_with_description
  File "src\oracledb\impl/thin/connection.pyx", line 118, in oracledb.thin_impl.ThinConnImpl._connect_with_address
  File "src\oracledb\impl/thin/protocol.pyx", line 230, in oracledb.thin_impl.Protocol._connect_phase_two
  File "src\oracledb\impl/thin/protocol.pyx", line 344, in oracledb.thin_impl.Protocol._process_message
  File "src\oracledb\impl/thin/protocol.pyx", line 321, in oracledb.thin_impl.Protocol._process_message
  File "src\oracledb\impl/thin/messages.pyx", line 287, in oracledb.thin_impl.Message.send
  File "src\oracledb\impl/thin/messages.pyx", line 1537, in oracledb.thin_impl.AuthMessage._write_message
  File "src\oracledb\impl/thin/messages.pyx", line 1345, in oracledb.thin_impl.AuthMessage._generate_verifier
KeyError: 'AUTH_PBKDF2_CSK_SALT'

Process finished with exit code 1


  • 写回答

2条回答 默认 最新

  • 黑夜中的行者534 2022-11-17 12:36
    关注

    自问自答,这真的是一个愚蠢的问题,Oracle客户端版本和服务器版本不一致。

    1、删除了开发机上的Oracle客户端,这一步也是麻烦不断,反正多次重启和用命令行删除文件后成功删除。

    2、下载正确版本的instant client,其实就是个zip文件,解压缩就可以免安装使用;

    3、在Python代码里面指定几个必要的目录,再运行代码就成功了。

    
    import oracledb
    
    #初始化Oracle环境参数
    #lib_dir=Oracle客户端安装的主目录
    #config_dir=tnsnames.ora所在的目录,SID配置在这个文件里面
    oracledb.init_oracle_client(lib_dir=r"C:\Oracle\instantclient_12_1", config_dir=r"C:\Oracle\instantclient_12_1\network\admin")
    
    connection = oracledb.connect(user="SYSADM", password="SYSADM", dsn="172.16.136.100/HR92DMO")
    
    cur = connection.cursor()
    cur.execute("select * from PS_COMPANY_TBL")
    while True:
        row = cur.fetchone()
        if row is None:
            break
        print(row)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 创建了问题 11月16日

悬赏问题

  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!