【发布时间】: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 驱动程序的版本不匹配。