Python连接到AWS EC2中的Teradata

Python连接到AWS EC2中的Teradata,python,python-2.7,amazon-ec2,odbc,teradata,Python,Python 2.7,Amazon Ec2,Odbc,Teradata,我想从Teradata实例中提取数据。客户端代码在AWS EC2实例上运行Python2.7+ 我安装了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(dri

我想从Teradata实例中提取数据。客户端代码在AWS EC2实例上运行Python2.7+

我安装了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)
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))
创建的调用Teradata的
TeradataClient
类I如下所示:

import sys
import teradata
# my own imports
td = TeradataClient(DEFAULT_HOSTNAME, DEFAULT_USERNAME, DEFAULT_PASSWORD)
td.select(query, outfile)
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))

我怎样才能解决这个问题?是否需要安装其他ODBC驱动程序?

听起来您需要安装Teradata ODBC驱动程序

可在Teradata Developer Exchange上获得。

我今天遇到了这个问题,发现它是由最新版本的teradata python包引起的。使用pip安装版本15.10.0.10允许我从RHEL实例进行连接。

这为我解决了以下问题:

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\u版本
  • udaExec.connect

    • 我知道我晚了大约2年,但今天我遇到了同样的问题,并找到了解决办法。请转到/usr/lib64并检查以下两个符号链接:

      lrwxrwxrwx 1 root root 20 Oct 18 10:56 libodbcinst.so -> libodbcinst.so.2.0.0
      lrwxrwxrwx 1 root root 20 Oct 18 10:56 libodbcinst.so.2 -> libodbcinst.so.2.0.0
      
      如果他们不指向teradata,它将无法工作!它们应该指向teradata odbc安装目录:

      修复(使用风险自负,无需任何担保);):

      结果是:

      lrwxrwxrwx 1 root root 47 Oct 25 20:10 libodbcinst.so -> /opt/teradata/client/16.20/lib64/libodbcinst.so
      lrwxrwxrwx 1 root root 43 Oct 25 20:10 libodbc.so -> /opt/teradata/client/16.20/lib64/libodbc.so
      

      瞧,与Teradata的连接应该运行得很顺利

      也许是波托<代码>boto3已安装。请发布尝试的连接字符串。它可能是一个非常小的语法或缺少的属性。请添加所有导入的
      import
      行。@Parfait:发布了代码。同样的代码在Macbook上运行得非常好。它只在Linux系统上崩溃。因此,启动正确的驱动程序时出现了一些问题。我已经安装了驱动程序,但它没有显示在驱动程序列表中。可能是驱动程序是64位的,而python是32位的(反之亦然)?这可能会导致驱动程序无法在Windows中显示,无法确定Unix/Linux。谢谢Alex。我切换到使用REST界面,所以我不必完全处理驱动程序。现在好多了。