Пишите в Teradata с помощью python (aos_td) - PullRequest
0 голосов
/ 22 мая 2018

У меня есть фрейм данных Pandas, который я хочу вставить в таблицу Teradata.

with aos_td.default_session(username='my_username', password='my_password', 
                            system='blah.blah.com') as session:

    session.executemany("""SCHEMA.TABLE(col1,col2,col3,col4) 
                        VALUES (?,?,?,?)""", df2)

Похоже, что python пытается включить индекс в виде столбца, и он не соответствует количеству столбцов в Teradata, выдавая эту ошибку:

java.sql.SQLExceptionPyRaisable: java.sql.SQLException: [Teradata JDBC Driver] 
[TeraJDBC 15.10.00.14] [Error 256] [SQLState HY000] 
Parameter index value 5 is outside the valid range of 1 through 4

Какя могу заставить это работать?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы также можете использовать SQLAlchemy для этого.

Пожалуйста, соблюдайте Код после установления соединения с Teradata:

Откройте соединение Teradata

udaExec = teradata.UdaExec (appName="App_Name", version="1.0",logConsole=False)
session = udaExec.connect(method="odbc", system='System_Details', 
username=getpass.getuser(), password=getpass.getpass());

%load_ext sql

try:
    %sql $connection_string
except Exception as e:
    print(e)

Создание новой таблицы Teradata из Python Dataframe ..

from sqlalchemy import create_engine
engine = create_engine('sqlite://', echo=False)

Запись данных в Teradata

df.to_sql('dff2', con=engine)
engine.execute("SELECT * FROM dff2").fetchall()
0 голосов
/ 23 мая 2018

Чтобы получить записи без индекса, используйте

.to_records(index=False)

Полный код для записи в Teradata из python с помощью aos_td:

with aos_td.default_session(username='my_username', password='my_password', 
                        system='blah.blah.com') as session:

session.executemany("""SCHEMA.TABLE(col1,col2,col3,col4) 
                    VALUES (?,?,?,?)""", df2.to_records(index=False))
...