用python写一个Teradata(aos_td)

时间:2018-05-22 00:29:18

标签: python pandas dataframe teradata

我有一个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 :(得分:0)

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

.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))

答案 1 :(得分:0)

您还可以为此使用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数据框创建新的Teradata表。

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

将数据帧写入Teradata

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