2016-10-05 20 views
1

Teradataインスタンスからデータを取得したい。クライアントコードは、AWS EC2インスタンスでPython2.7 +を実行します。PythonがAWS EC2のTeradataに接続

私はunixODBCのドライバとsudo pip install teradataをインストールしますが、私はまだ次の例外を取得しています:

File "/usr/local/lib/python2.7/site-packages/teradata/tdodbc.py", line 369, in determineDriver 
"Available drivers: {}".format(dbType, ",".join(drivers))) 
teradata.api.InterfaceError: ('DRIVER_NOT_FOUND', "No driver found for 'Teradata'. Available drivers: PostgreSQL,MySQL") 

次のようにコードは次のとおりです。

import sys 
import teradata 
# my own imports 
td = TeradataClient(DEFAULT_HOSTNAME, DEFAULT_USERNAME, DEFAULT_PASSWORD) 
td.select(query, outfile) 

次のようにTeradataのを呼び出して、私が作成したTeradataClientクラスであります:

class TeradataClient: 
    def __init__(self, hostname, username, password): 
     self._hostname = hostname 
     self._username = username 
     self._password = password 
     self._udaExec = teradata.UdaExec(appName="MyApp", version="1.0", logConsole=False) 


    def select(self, query, outfile, sep=DEFAULT_SEPARATOR, nullstr=DEFAULT_NULL_STR): 
     with self._udaExec.connect(method="odbc", system=self._hostname, username=self._username, 
              password=self._password) as session: 
      print 'Connection to Teradata established' 
      with open(outfile,'w') as fp: 
       with session.cursor() as cursor: 
        for row in cursor.execute(query): 
         lineparts = [str(x if x!=None else nullstr) for x in row] 
         fp.write('%s\n' %sep.join(lineparts)) 

ixこれ?インストールが必要な別のODBCドライバがありますか?

+0

のbotoでsystem kwargのため? [link](https://aws.amazon.com/articles/3998) – JC203

+0

'boto3'は既にインストールされています。 – Nik

+0

接続文字列を試行してください。それは、非常に小さな構文または欠落した属性である可能性があります。そして、すべての 'import'行を追加してください。 – Parfait

答えて

0

Teradata ODBCドライバをインストールする必要があるようです。

Teradata Developer Exchangeで使用できます。 http://downloads.teradata.com/download/connectivity

+0

ドライバをインストールしましたが、ドライバのリストに表示されません。 – Nik

+0

ドライバは64ビットで、Pythonは32ビットです(またはその逆)? ドライバがWindowsに表示されないことがあります。Unix/Linuxについては不明です。 –

0

今日この問題が発生し、最新のバージョンのteradata pythonパッケージが原因であることが判明しました。 pipでバージョン15.10.0.10をインストールすると、私のRHELインスタンスから接続することができました。

+0

ありがとうアレックス。私はRESTインターフェースを使用するように切り替えたので、ドライバーをすべて扱う必要はありませんでした。今はるかに良い。 – Nik

1

これは私のために問題を修正しました:

export ODBC_VERSION=14.10 
export ODBCINI=/opt/teradata/client/$ODBC_VERSION/odbc_64/odbc.ini 
export ODBCINSTINI=/opt/teradata/client/$ODBC_VERSION/odbc_64/odbcinst.ini 
export LD_LIBRARY_PATH=/opt/teradata/client/$ODBC_VERSION/odbc_64/lib:/opt/teradata/client/$ODBC_VERSION/tdicu/lib64:$LD_LIBRARY_PATH 
export NLSPATH=/opt/teradata/client/$ODBC_VERSION/odbc_64/msg/tdodbc.cat 

注:

  • を変更$ODBC_VERSION、必要に応じて。
  • 更新/etc/resolv.conf多分udaExec.connect
関連する問題