代码之家  ›  专栏  ›  技术社区  ›  Mike - SMT

我是否使用了错误的主机名?

  •  0
  • Mike - SMT  · 技术社区  · 6 年前

    我使用Toad连接到我的Oracle数据库,这很好,但是我尝试使用cx\u Oracle连接到同一个数据库,我的程序被卡住了 .connect() 方法。

    我认为问题是 host connect()

    import cx_Oracle
    
    
    CONN_INFO = {'host': '\\\\SERVERNAMEUSEDINTOAD\\',
                 'port': 1111,
                 'user': 'USER123',
                 'psw': 'password',
                 'service': 'dbname.somesite.com'}
    print("test1")
    CONN_STR = '{user}/{psw}@{host}:{port}/{service}'.format(**CONN_INFO)
    print("test2")
    con = cx_Oracle.connect(CONN_STR)
    print("test3")
    print(con.fetchmany([1]))
    

    慰问:

    test1
    test2
    

    我成功了 test2 但不是 test3 . 我使用的主机名正确吗?主机是网络上的内部服务器。

    蟾蜍应用程序只显示 SERVERNAMEUSEDINTOAD 所以我也试过了:

    'host': 'SERVERNAMEUSEDINTOAD'
    

    test1
    test2
    Traceback (most recent call last):
      File "C:/Users/name/PycharmProjects/WorkFlow/test.py", line 12, in <module>
        con = cx_Oracle.connect(CONN_STR)
    cx_Oracle.DatabaseError: ORA-12154: TNS:could not resolve the connect identifier specified
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Mike - SMT    6 年前

    在做了一些挖掘之后,我发现了这个帖子:

    cx_Oracle doesn't connect when using SID instead of service name on connection string .

    makedsn() 然后用这个连接。

    我在这里张贴我的解决方案,所以任何人谁找到这个职位将有一个选项来解决这个问题。

    import cx_Oracle
    
    or_dns = cx_Oracle.makedsn('SERVERNAMEUSEDINTOAD', 1111, service_name='dbname.somesite.com')
    
    con = cx_Oracle.connect(user="USER123", password="password", dsn=or_dns)
    print(con)
    

    慰问:

    <cx_Oracle.Connection to USER123@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SERVERNAMEUSEDINTOAD)(PORT=1111))(CONNECT_DATA=(SERVICE_NAME=dbname.somesite.com)))>
    
        2
  •  0
  •   Bobby Durrett    6 年前

    我必须做两件事让你的例子在我的笔记本电脑上运行。

    我必须更新我的sqlnet.ora才能有这一行:

    而不是

    names.directory\u path=(TNSNAMES)

    我不认为这是cx\u oracle中的错误,因为sqlplus也没有使用相同的语法。但是,它与我的sqlnet.ora中的ip地址和EZCONNECT一起工作。

    鲍比