【问题标题】:Python teradata Uda Exec ODBC connection issuePython teradata Uda Exec ODBC连接问题
【发布时间】:2019-07-23 01:34:13
【问题描述】:

我正在使用 (Anaconda 3) Python 3.6.3 并从 https://pypi.python.org/pypi/teradata 安装了 Teradata 的 python 模块

我还在我的系统上创建了一个 ODBC 数据源,并且能够使用它成功登录(使用 Teradata SQL 助手)到 Teradata 系统(在不同的服务器上)。驱动版本为 13.00.00.09

我编写了一个因 ODBC 连接问题而失败的小测试代码:

 import Teradata

 import pandas as pd

 import sys
 print("attempting TD connection")
 udaExec = teradata.UdaExec(appName="just_td_test",       version="1.0", logConsole=False)
 #
 with udaExec.connect(method="odbc",system="abc", username="aaaaa",password="xxxxx", driver="Teradata") as connect:
     print("connection done. querying now...")
     query = "select top 10 tablename from dbc.tables;"
     df = pd.read_sql(query,connect)
     print(df.head())
 connect.close()    

错误信息:

attempting TD connection
Traceback (most recent call last):
File "td.py", line 16, in <module>
with udaExec.connect(method="odbc",system="abc", username="aaaaa",password="xxxxx", driver="Teradata") as connect:
File "C:\teradata-15.10.0.21.tar\teradata-15.10.0.21\teradata\udaexec.py", line 183, in connect
**args))
File "C:\teradata-15.10.0.21.tar\teradata-15.10.0.21\teradata\tdodbc.py", line 450, in __init__
SQL_NTS, None, 0, None, 0)
OSError: exception: access violation writing 0x0000000000000078
Exception ignored in: <bound method OdbcConnection.__del__ of OdbcConnection(sessionno=0)>
Traceback (most recent call last):
File "C:\teradata-15.10.0.21.tar\teradata-15.10.0.21\teradata\tdodbc.py", line 538, in __del__
self.close()
File "C:\teradata-15.10.0.21.tar\teradata-15.10.0.21\teradata\tdodbc.py", line 513, in close
 connections.remove(self)
 ValueError: list.remove(x): x not in list

很明显错误是与 ODBC 连接有关,但错误消息不清楚。 Teradata ODBC 驱动程序版本是 13,而 pypi 提供了 15 版本的 Teradata python 模块。这是错误的原因吗?

【问题讨论】:

  • 我可以通过 (1) 安装 ODBC 驱动程序 v16 和 (2) 在连接字符串中使用 DSN= 而不是 system= 来解决此问题。所以看来我的错误的原因是我之前使用的 ODBC 驱动程序的版本不匹配。

标签: odbc teradata pypi


【解决方案1】:

我可以通过以下方式解决问题 (1) 安装 ODBC 驱动程序 v16 和 (2) 在连接字符串中使用 DSN= 而不是 system=。

所以看来我的错误的原因是我之前使用的 ODBC 驱动程序的版本不匹配。希望它可以帮助某人。

【讨论】:

    【解决方案2】:

    尝试使用另一个 Python Teradata 库(如“teradatasql”)来删除驱动程序的依赖关系。这将只需要主机、用户名和密码参数进行连接。

    【讨论】:

      猜你喜欢
      • 2017-08-20
      • 2016-06-25
      • 1970-01-01
      • 2017-06-16
      • 2022-07-14
      • 2012-01-04
      • 1970-01-01
      相关资源
      最近更新 更多