Python 连接字符串中的属性无效:DBCNAME。使用“创建引擎”时&;熊猫到_sql

Python 连接字符串中的属性无效:DBCNAME。使用“创建引擎”时&;熊猫到_sql,python,pandas,sqlalchemy,Python,Pandas,Sqlalchemy,下午, python非常新,但在尝试使用Teradata使用sqlalchemycreate_engine和pandas到sql时,我遇到了以下错误 错误消息数据库错误:(teradata.api.DatabaseError)(0,[08001][TPT][ODBC SQL Server有线协议驱动程序]连接无效 数据.,[TPT][ODBC SQL Server Wire Protocol driver]中的属性无效 连接字符串:DBCNAME。“) 背景 我正在读取一些客户标识符,并连接到一

下午,
python非常新,但在尝试使用Teradata使用
sqlalchemy
create_engine
pandas
到sql
时,我遇到了以下错误

错误消息数据库错误:(teradata.api.DatabaseError)(0,[08001][TPT][ODBC SQL Server有线协议驱动程序]连接无效 数据.,[TPT][ODBC SQL Server Wire Protocol driver]中的属性无效 连接字符串:DBCNAME。“)

背景
我正在读取一些客户标识符,并连接到一些Teradata数据库,以提取一些信息并将其放入pandas数据帧中,如下面代码第一节中的示例所示。这种方法重复多次,效果良好。我现在需要将这些数据插入另一个Teradata数据库。因此,我想使用sqlalchmey create_engine和pandas_sql
我还安装了“sqlalchemy teradata”

当执行“df_name.to_sql…”行时,代码抛出上述错误

我已经阅读了以下内容,但似乎找不到如何将DBCNAME传递到连接字符串中,也找不到导致错误的原因

我已经安装了Teradata SQL assistant,它使用下面的连接信息,我可以毫无问题地登录到它

[ODBC]  
DRIVER=Teradata  
UID= abcdef  
DBCNAME= aaaaa.bbb.ccccccc.co.uk  
我还可以从命令提示符ping DBCname,效果很好

环境
3.6.3 | Anaconda,Inc.|(默认,2017年10月15日,03:27:45)[MSC v.1900 64位(AMD64)]/windows 7 Teradata版本15.10.05.04

# section one 
import pandas as pd
import pyodbc
# define my sql string here 
xref_query = "SELECT A, B,C, "\
"FROM someting "\
"WHERE A= " +sql_param
#connect to terdata ** this works fine**
#Specify connection string
conn = pyodbc.connect(r'DRIVER=
{Teradata};DBCName=aaaaa.bbb.ccccccc.co.uk;DATABASE=somthing;
Username=abcdef;password=ghijk')

#connect and run sql 
df_xref_temp = pd.read_sql(xref_query, conn)
conn.close()

#Section two
from sqlalchemy import create_engine 
#use sqlalchemy create_engine 
#abcdef  = teradata user name 
#ghijk = teradata password
#@aaaaa.bbb.ccccccc.co.uk = teradata DBCname
td_engine = create_engine(r'teradata://abcdef:ghijk@aaaaa.bbb.ccccccc.co.uk/databas_name')
print(td_engine)
#This results in 
"Engine(teradata://abcdef:ghijk:***@daaaaa.bbb.ccccccc.co.uk/database_name)"   
df_name.to_sql('fos_chtax_results',con=td_engine, if_exists='append', index 
=False) 
谢谢你的帮助

更新 早上好

经过更多的阅读,我已经设法在这个错误上取得一些进展

似乎如果我使用主机名连接而不是DNS连接并指定默认驱动程序,它就可以工作了 新代码

td_engine = create_engine("teradata://abcdef:ghijk@aaaaa.bbb.ccccccc.co.uk/database_name?driver=Teradata")  
#new code using a variable 
td_engine = create_engine(con_str)
我也可以用变量替换文本字符串,使其成为动态的。但是我想使用字典方法,如下所述,但我找不到一种方法来包含主机名方法的额外数据信息,即“?driver=Teradata”。文档似乎表明它不受支持?

**行“#这导致…”是打印td#U引擎的结果。您可以在您的帖子中包含该信息,而不是将其放在评论中:)