连接字符串中的属性无效:DBCNAME。当使用create_engine&熊猫to_sql

时间:2018-04-25 13:10:55

标签: python pandas sqlalchemy

下午,
对python来说很新,但在尝试将sqlalchemy create_enginepandas to_sql与Teradata一起使用时,我遇到了以下错误。

  

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

背景
我正在阅读一些客户标识符并连接到许多Teradata数据库以提取一些信息并将其放入pandas数据框中,如下面的代码部分中的示例所示。这种方法重复了很多次并且工作正常。我现在需要将此数据插入另一个Teradata数据库。因此我想使用sqlalchmey create_engine和pandas to_sql
我也安装了“sqlalchemy-teradata”

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

我已阅读以下内容,但似乎无法找到如何将DBCNAME传递到连接字符串中,或​​者导致错误的原因

I am trying to construct an sqlalchemy engine using a dict which has variables parsed to it from tkinter https://github.com/Teradata/sqlalchemy-teradata/wiki/Examples http://docs.sqlalchemy.org/en/latest/core/engines.html

我安装了Teradata SQL助手,它使用下面的连接信息,我可以登录到没有任何问题

[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 bit(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)

我也可以用变量替换文本字符串,使其成为动态的。但是,我想使用字典方法,如下所述,但我找不到一种方法来包含Hostname方法的额外数据信息,即“?driver = Teradata”。该文件似乎表明它不受支持? I am trying to construct an sqlalchemy engine using a dict which has variables parsed to it from tkinter

0 个答案:

没有答案