Teradata和sqlachemy连接

时间:2019-08-26 13:12:08

标签: python sqlalchemy odbc teradata teradata-sql-assistant

所以知道我希望将sqlachemy和teradata方言一起使用来将某些csv推入表中。 到目前为止,我写的是这个:

import pandas as pd
from sqlalchemy import create_engine

user = '******'
pasw = '******'
host = 'FTGPRDTD'
DATABASE = 'DB_FTG_SRS_DATALAB'

# connect
td_engine = create_engine('teradata://'+ user +':' + pasw + '@'+ DBCNAME + ':1025/')

print ('ok step one')
print(td_engine)
# execute sql
df = pd.read_csv(r'C:/Users/c92434/Desktop/Load.csv')
print('df chargé')

df.to_sql(name= 'mdc_load', con = td_engine, index=False, schema = DATABASE, 
if_exists='replace')
print ('ok step two')

这是我收到的错误消息:

DatabaseError:(teradata.api.DatabaseError)(0,'[08001] [TPT] [ODBC SQL Server有线协议驱动程序]无效的连接数据。,[TPT] [ODBC SQL Server有线协议驱动程序]无效的连接属性字符串:DBCNAME。”) (此错误的背景位于:http://sqlalche.me/e/4xp6

我能做什么?

最诚挚的问候

Kair0

2 个答案:

答案 0 :(得分:0)

“ teradata”方言(sqlalchemy-teradata模块)依赖于在客户端平台上单独安装的Teradata ODBC驱动程序。如果您安装了多个ODBC驱动程序,其名称中包含单词Teradata(例如,因为您已将TPT与其他数据库平台的Teradata品牌驱动程序一起安装),则可能需要通过附加可选选项来明确指定要使用的驱动程序。连接字符串的参数,例如

td_engine = create_engine('teradata://'+ user +':' + pasw + '@'+ DBCNAME + ':1025/?driver=Teradata Database ODBC Driver 16.20')

或者,您可以使用不需要ODBC的“ teradatasql”方言(teradatasqlalchemy模块)。

答案 1 :(得分:0)

希望你现在已经解决了这个问题,但我已经成功了。查看您提供的内容,您设置的主机信息似乎未在连接字符串中使用。我的示例包含 dtype 参数,我用它来定义每列的数据类型,这样它们就不会显示为 CLOB。

database = "database_name"
table = "mdc_load"
user = "user"
password = "password"
host = 'FTGPRDTD:1025'

td_engine = create_engine(f'teradata://{user}:{password}@{host}/?database={database}&driver=Teradata&authentication=LDAP')
conn = td_engine.connect()
data.to_sql(name=table, con=conn, index=False, if_exists='replace', dtype=destType)
conn.close()