Python teradata Uda Exec ODBC 连接问题
Python teradata Uda Exec ODBC connection issue
我正在使用 (Anaconda 3) Python 3.6.3 并且已经从 https://pypi.python.org/pypi/teradata
安装了 Teradata 的 python 模块
我还在我的系统上创建了一个 ODBC 数据源,并且能够使用它成功登录(使用 Teradata SQL Assistant)到一个 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 驱动程序的版本不匹配。希望对大家有帮助。
尝试使用另一个 Python Teradata 库,例如 'teradatasql' 来删除对驱动程序的依赖。这将需要单独的主机、用户名和密码参数进行连接。
我正在使用 (Anaconda 3) Python 3.6.3 并且已经从 https://pypi.python.org/pypi/teradata
安装了 Teradata 的 python 模块我还在我的系统上创建了一个 ODBC 数据源,并且能够使用它成功登录(使用 Teradata SQL Assistant)到一个 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 驱动程序的版本不匹配。希望对大家有帮助。
尝试使用另一个 Python Teradata 库,例如 'teradatasql' 来删除对驱动程序的依赖。这将需要单独的主机、用户名和密码参数进行连接。