【问题标题】:jaydebeapi teradata connectionjaydebeapi teradata 连接
【发布时间】:2016-01-04 10:45:25
【问题描述】:

我正在尝试使用 jaydebeapi 包连接到 teradata 数据库。

conn = jaydebeapi.connect('com.teradata.jdbc.TeraDriver',
                          ['jdbc:teradata://ip/TMODE=ANSI,CHARSET=utf8', 'username', 'password'],
                          ['/teradata/tdgssconfig.jar',
                           '/terajdbc4.jar'])

执行时出错:

    TERAJDBC4 ERROR [main] com.teradata.jdbc.jdk6.JDK6_SQL_Connection@3d1a70a7 Connection to <ip_address> Wed Oct 07 13:47:29 IST 2015 socket orig=<ip_address> cid=22f79598 sess=0 java.net.SocketTimeoutException: connect timed out  at java.net.PlainSocketImpl.socketConnect(Native Method)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)  at java.net.Socket.connect(Socket.java:579)  at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF$ConnectThread.run(TDNetworkIOIF.java:1216) 
Traceback (most recent call last):
  File "test_teradata.py", line 32, in <module>
    teradataconn()
  File "test_teradata.py", line 26, in teradataconn
    '/home/abhishek/git/dblore/code/lib/teradata/terajdbc4.jar'])
  File "/usr/local/lib/python2.7/dist-packages/jaydebeapi/__init__.py", line 359, in connect
    jconn = _jdbc_connect(jclassname, jars, libs, *driver_args)
  File "/usr/local/lib/python2.7/dist-packages/jaydebeapi/__init__.py", line 183, in _jdbc_connect_jpype
    return jpype.java.sql.DriverManager.getConnection(*driver_args)
jpype._jexception.SQLExceptionPyRaisable: java.sql.SQLException: [Teradata JDBC Driver] [TeraJDBC 15.00.00.20] [Error 1277] [SQLState 08S01] Login timeout for Connection to <ip_address> Wed Oct 07 13:47:29 IST 2015 socket orig=<ip_address> cid=22f79598 sess=0 java.net.SocketTimeoutException: connect timed out  at java.net.PlainSocketImpl.socketConnect(Native Method)  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)  at java.net.Socket.connect(Socket.java:579)  at com.teradata.jdbc.jdbc_4.io.TDNetworkIOIF$ConnectThread.run(TDNetworkIOIF.java:1216) 

【问题讨论】:

  • "SocketTimeoutException: connect timed out" 没有带ip的服务器,或者没有及时响应(比如防火墙,或者其他网络问题)
  • 我能够使用相同的 JDBC 驱动程序和参数通过 Java 连接到数据库。

标签: python jdbc teradata jaydebeapi


【解决方案1】:

我使用以下代码连接到 Teradata DB,它适用于多个服务器和数据库。

import jaydebeapi
server=192.168.3.4
database=dbc
user=dbc
password=dbc

# from TD JDBC readme.txt
jclassname='com.teradata.jdbc.TeraDriver'
# from TD Studio jdbc:<subprotocol>://<server>:<port>/<database>
url='jdbc:teradata://'+server+'/'+database
# driver args contains the arguments passed to java: DriverManager.getConnections(...)
driver_args=[url,user,password]
# my jars are in CLASSPATH environment variable, if not then put the paths to them into a list, e.g.: jars=[r'C:\Program Files\Teradata\TeraJDBC\terajdbc4.jar;C:\Program Files\Teradata\TeraJDBC\tdgssconfig.jar']
jars=None

jaydebeapi.connect(jclassname,driver_args,jars)

与您的代码相比,我只在您的 url 中看到 ip(我猜是替换您的真实 IP 地址),您是否也将数据库名称添加到路径中?如果没有,问题可能就在那里。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我有一个如下示例,希望对您有所帮助:

    [root@myhost transfer]# cat test_conn.py 
    import jaydebeapi
    from contextlib import closing
    
    
    jclassname='com.teradata.jdbc.TeraDriver'
    jdbc_driver_loc = '/opt/spark-2.3.1/jars/terajdbc4-16.20.00.06.jar,/opt/spark-2.3.1/jars/tdgssconfig-16.20.00.06.jar'
    jdbc_driver_name = 'com.teradata.jdbc.TeraDriver'
    host='my_teradata.address'
    
    url='jdbc:teradata://' + host + '/TMODE=TERA'
    login="teradata_user_name"
    psw="teradata_passwd"
    
    sql = "SELECT COUNT(*) FROM  A_TERADATA_TABLE_NAME where month_key='202009'"
    
    
    conn = jaydebeapi.connect(jclassname=jdbc_driver_name,
                                      url=url, 
                                      driver_args=[login, psw],
                                      jars=jdbc_driver_loc.split(","))
    
    with closing(conn) as conn:
        with closing(conn.cursor()) as cur:
            cur.execute(sql)
            print(cur.fetchall())
       
    [root@myhost transfer]# python test_conn.py
    [(7734133,)]
    [root@myhost transfer]# 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2018-10-01
      • 2020-06-29
      • 2020-12-11
      • 2019-12-30
      • 2019-05-24
      • 2014-10-23
      相关资源
      最近更新 更多