【发布时间】:2021-12-09 03:08:41
【问题描述】:
我在尝试将数据从 df 插入 Oracle 数据库表时遇到问题,这是错误:DatabaseError: ORA-01036: 非法变量名/编号
这些是我做的步骤:
这是我从 yfinance 包中导入并详细说明的数据框,以尊重我的 df 数据类型的完整性
我将我的 df 转换成一个列表,这些是我在列表中的数据:
这是我要插入数据的表:
这是代码:
sql_insert_temp = "INSERT INTO TEMPO('GIORNO','MESE','ANNO') VALUES(:2,:3,:4)"
index = 0
for i in df.iterrows():
cursor.execute(sql_insert_temp,df_list[index])
index += 1
connection.commit()
我已经尝试在 sqldeveloper 工作表中进行一次插入,使用您在列表中可以看到的数据,并且它有效,所以我想我在代码中犯了一些错误。我看过其他讨论,但我找不到任何解决我的问题的方法。你知道我该如何解决这个问题,或者是否有可能以其他方式做到这一点?
我尝试打印迭代查询,结果就是这样,这就是它没有插入我的数据的原因:
【问题讨论】:
-
可能的 根本原因 - 这是在 Oracle invalid 列名中(用撇号引用)
"INSERT INTO TEMPO('GIORNO','MESE','ANNO')你应该使用 quotes'INSERT INTO TEMPO("GIORNO","MESE","ANNO")。另外executemany会更好。 -
除了建议的
to_sql方法外,永远不要使用循环和插入,因为它非常慢:每次循环通过时往返和解析太多。使用executemany和元组列表来执行批量插入。
标签: python pandas oracle list dataframe