【问题标题】:Unable to connect to Teradata using Anaconda 4.3.1(64-bit) with Python 2.7.13无法使用 Anaconda 4.3.1(64 位)和 Python 2.7.13 连接到 Teradata
【发布时间】:2020-01-08 03:07:49
【问题描述】:

我无法使用 python 实现 teradata 连接。我用 python 2.7.13 设置了 anaconda 4.3.1(64 位)。此外,我为 16.20 安装了 teradata odbc 客户端驱动程序,并使用用户 DSN 详细信息配置了 odbc.ini 文件。

我已经尝试了本文中提到的选项 - https://github.com/Teradata/PyTd/issues/43 https://github.com/Teradata/PyTd/issues/89

import teradata
  import os, sys
  os.environ["ODBCINI"] ="/opt/teradata/client/16.20/odbc_64/odbc.ini"
  os.environ["O`enter code here`DBCINST"] ="/opt/teradata/client/16.20/odbc_64/odbcinst.ini"
  os.environ["LD_LIBRARY_PATH"] ="/opt/teradata/client/16.20/odbc_64/lib"

udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0", odbcLibPath="/opt/teradata/client/16.20/odbc_64/lib/tdataodbc_sb64.so")
session = udaExec.connect(method="odbc", system="tdprod", username="xxxxx", password="yyyyy")
for row in session.execute("SELECT GetQueryBand();"):
print(row)

下面是这个脚本的执行日志和错误信息-

[servername@python]$ python test_teradata.py
Traceback (most recent call last):
File "test_teradata.py", line 17, in 
session = udaExec.connect(method="odbc", system="tdprod", username="xxxxx", password="yyyyy")
File "/.../.../anaconda/lib/python2.7/site-packages/teradata/udaexec.py", line 183, in connect
**args))
File "/.../.../anaconda/lib/python2.7/site-packages/teradata/tdodbc.py", line 421, in __init__init(odbcLibPath)
File "/.../.../anaconda/lib/python2.7/site-packages/teradata/tdodbc.py", line 367, in init initFunctionPrototypes()
File "/.../.../anaconda/lib/python2.7/site-packages/teradata/tdodbc.py", line 298, in initFunctionPrototypes prototype(odbc.SQLDrivers, SQLHANDLE, SQLUSMALLINT, PTR(SQLCHAR),
File "/.../.../anaconda/lib/python2.7/ctypes/init.py", line 375, in __getattr__func = self.getitem(name)
File "/.../.../anaconda/lib/python2.7/ctypes/init.py", line 380,in __getitem__func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /opt/teradata/client/16.20/odbc_64/lib/tdataodbc_sb64.so: undefined symbol: SQLDrivers

【问题讨论】:

    标签: python-2.7 anaconda odbc teradata


    【解决方案1】:

    如果提供,odbcLibPath 应指向 ODBC 驱动程序管理器 (libodbc.so),而不是 ODBC 驱动程序本身。

    如果选择了错误的驱动程序,则将显式 driver= 参数添加到连接参数,例如driver="Teradata Database ODBC Driver 16.20".`

    【讨论】:

    • Fred -- 我将代码修改为 odbcLibPath="/opt/teradata/client/16.20/odbc_64/lib/libodbc.so" 和 session = udaExec.connect(method="odbc", driver ="Teradata 数据库 ODBC 驱动程序 16.20", system="tdprod", username="xxxxx", password="yyyyyy") 但是我收到另一个错误 ==> teradata.api.InterfaceError: ('DRIVER_NOT_FOUND', "No找到名称为“Teradata Database ODBC Driver 16.20”的驱动程序。可用驱动程序:")
    • 仔细检查您的 ODBCINST 环境变量和文件本身。 [ODBC Drivers] 部分应该有一个类似 Teradata Database ODBC Driver 16.20=Installed 的条目,而 = 之前的名称是您应该为 driver= 使用的名称。如果默认示例文件中只有一个名称,则不需要driver=
    • 嗨 Fred - 我在以下位置有这个 odbcinst.ini 文件:/opt/teradata/client/16.20/odbc_64,它的设置如下 [ODBC 驱动程序] Teradata Database ODBC 驱动程序 16.20=已安装。同样在我的脚本中,我确保此驱动程序名称与上面的名称相同,并且还初始化了环境变量,例如 os.environ["ODBCINST"] ="/opt/teradata/client/16.20/odbc_64/odbcinst.ini" ... ..但是错误仍然存​​在。出于调试目的,我尝试了返回“无”的 print(teradata.todbc.drivers)。请指教。
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2023-03-31
    • 1970-01-01
    • 2019-04-18
    • 2017-06-16
    • 2016-06-26
    相关资源
    最近更新 更多