DatabaseError: ORA-00928: missing SELECT keyword

DatabaseError: ORA-00928: missing SELECT keyword

我是一个新的 oracle 学习者。我正在尝试将 pandas 数据帧插入到 oracle table 中。网上查了下,代码本身(https://www.snip2code.com/Snippet/704409/Insert-pandas-dataframe-to-Oracle-databa/)应该很简单,就是不知道为什么我的代码不行

我已经从我的本地文件中读取了 pandas 数据框:

import cx_Oracle
import pandas as pd
import os

dir_path = os.path.dirname(os.path.realpath("__file__"))
df = pd.read_csv(dir_path+"/sample.csv")

现在打印df,dataframe df应该是这样的:

   DATE            YEAR     MONTH      SOURCE      DESTINATION
0  11/1/2017 1:00  2017     1          AL          CO  
1  11/2/2017 1:00  2017     5          GA          ID  
2  11/3/2017 1:00  2017     12         GA          MO    

然后我使用 cx_Oracle 创建与数据库的连接。接下来,我尝试将数据帧 df 插入 table TEST。这个table TEST 是一个空的table,它已经存在于oracle 数据库中,它在oracle 中有包括DATE、YEAR、MONTH、SOURCE、DESTINATION 的列。所有数据类型都匹配 df 的数据。我的代码如下:

conn_str = u'account/password@host:1521/server'
conn = cx_Oracle.connect(conn_str)
cur = conn.cursor()

# Write records stored in a DataFrame to a oracle database
rows = [tuple(x) for x in df.values]
print(rows)
cur.executemany('''INSERT INTO TEST (DATE,YEAR,MONTH,SOURCE,DESTINATION) 
                   VALUES (:1,:2,:3,:4,:5)''',rows)

conn.commit()
conn.close()

显示错误:

DatabaseError: ORA-00928: missing SELECT keyword

如何解决问题?非常感谢您的宝贵时间!

DATE是Oracle中的保留字SQL。您需要引用它(或将您的列重命名为不是保留字的名称)。 YEAR也是保留字,同样处理

insert into test("DATE", ...

像这样引用时,大小写必须与 table 定义中使用的大小写相匹配。

保留字和关键字的完整列表:Oracle (12c) SQL Reserved Words and Keywords