【发布时间】:2019-10-27 08:44:14
【问题描述】:
我无法确定需要传递给创建引擎语句的正确 ODBC 字符串。
这行得通
import pyodbc
import pandas as pd
cnxn=pyodbc.connect('DRIVER=/opt/teradata/client/ODBC_64/lib/tdata.so;DBCName=Server;UID=UN;PWD=PW;Database=myDB')
query = "select top 10 * from TABLE"
df = pd.read_sql(query,cnxn)
这不起作用
import urllib
import sqlalchemy
params = urllib.parse.quote_plus('DRIVER=/opt/teradata/client/ODBC_64/lib/tdata.so;DBCName=Server;UID=UN;PWD=PW;Database=myDB')
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
query = "select top 10 * from TABLE"
df = pd.read_sql_query(query, engine)
我可以让 pyodbc 连接工作,但不能让 sqlalchemy 连接工作。任何帮助将不胜感激。
我收到此错误:
InterfaceError: (pyodbc.InterfaceError) ('IM001', '[IM001] [unixODBC][Driver Manager]Driver does not support this function (0) (SQLGetInfo)')
【问题讨论】:
-
SQLAlchemy 仅限于少数 RDBMS(Oracle、SQL Server、Postgres、MySQL、SQLite 等)。您正在尝试在 Teradata 连接上使用 SQL Server 方言:
mssql+pyodbc。您将需要合并一个external dialect for Teradata。但请注意:关于 StackOverflow 的建议是题外话。 -
您可能还对this question感兴趣。
-
检查 Teradata-SQLAlchemy:github.com/Teradata/sqlalchemy-teradatadownloads.teradata.com/tools/articles/…
-
或者更新的teradatasqlalchemy方言,不再需要ODBC
标签: python pandas sqlalchemy teradata pyodbc