我有一个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
我怎样才能让它发挥作用?
答案 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建立连接后,请遵守本守则:
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)
from sqlalchemy import create_engine
engine = create_engine('sqlite://', echo=False)
df.to_sql('dff2', con=engine)
engine.execute("SELECT * FROM dff2").fetchall()