使用 python (aos_td) 写入 Teradata

Write to Teradata with python (aos_td)

我有一个 Pandas 数据框,我想将其插入到 Teradata table 中。

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

我怎样才能让它工作?

要获取没有索引的记录,请使用

.to_records(index=False)

这是使用 aos_td 从 python 写入 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.to_records(index=False))

您也可以为此使用 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)

正在从 Python Dataframe 创建新的 Teradata Table..

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

正在将 Dataframe 写入 Teradata

df.to_sql('dff2', con=engine)
engine.execute("SELECT * FROM dff2").fetchall()