Соединение Teradata и sqlachemy

Я хочу использовать 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)

Что я могу сделать?


person Kair0    schedule 26.08.2019    source источник


Ответы (2)


Надеюсь, вы уже решили эту проблему, но у меня это получилось. Глядя на то, что вы предоставили, похоже, что установленная вами информация о хосте не используется в строке подключения. Мой пример включает параметр 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()
person Dan    schedule 22.01.2021

Диалект «teradata» (модуль sqlalchemy-teradata) зависит от драйвера ODBC Teradata, который отдельно устанавливается на клиентской платформе. Если у вас установлено несколько драйверов ODBC, в названии которых есть слово Teradata (например, поскольку вы установили TPT вместе с драйверами Teradata для других платформ баз данных), вам может потребоваться явно указать тот, который будет использоваться, добавив необязательный параметр вашей строки подключения, например.

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

В качестве альтернативы вы можете использовать диалект «teradatasql» (модуль teradatasqlalchemy), который не требует ODBC.

person Fred    schedule 26.08.2019