Неверный атрибут в строке подключения: DBCNAME.при использовании create_engine & Pandas to_sql - PullRequest
0 голосов
/ 25 апреля 2018

После полудня,
Очень плохо знаком с Python, но я застрял со следующей ошибкой при попытке использовать sqlalchemy create_engine и pandas to_sql с Teradata.

Сообщение об ошибке DatabaseError: (teradata.api.DatabaseError) (0, '[08001] [TPT] [Драйвер протокола ODBC SQL Server Wire] Неверные данные подключения., [TPT] [Драйвер ODBC SQL Server Wire Protocol] Недопустимый атрибут в строке подключения: DBCNAME. ')

Фон
Я читаю некоторые идентификаторы клиентов и подключаюсь кнесколько баз данных Teradata для извлечения некоторой информации и помещения ее во фреймы данных pandas, как показано в примере в первом разделе кода ниже.Этот подход повторяется несколько раз и прекрасно работает.Теперь мне нужно вставить эти данные в другую базу данных Teradata.Поэтому я хотел бы использовать sqlalchmey create_engine и pandas to_sql
Я также установил "sqlalchemy-teradata"

Код выдает вышеуказанную ошибку при выполнении строки "df_name.to_sql…"

Я прочитал следующее, но не могу найти способ передачи DBCNAME в строку подключения или причины ошибки

Я пытаюсь создать механизм sqlalchemy, используяdict, переменные которого были проанализированы с 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  

Я также могу пропинговать имя DBC из командной строки, что прекрасно работает

Среда
3.6.3 | Anaconda, Inc. |(по умолчанию 15 октября 2017 г., 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».Документация может показаться не поддерживаемой? Я пытаюсь создать движок sqlalchemy, используя dict, в котором переменные проанализированы из tkinter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...