我是一名新的甲骨文学习者。我正在尝试将一个pandas数据帧插入到oracle表中。我已经在网上进行了研究,代码本身(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,数据帧df shold如下:
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插入到表TEST中。此表TEST是一个空表,已存在于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:缺少SELECT关键字
如何解决问题?非常感谢你的时间!
答案 0 :(得分:1)
DATE
是Oracle SQL中的保留字。您需要引用它(或将列重命名为非保留字的内容)。 YEAR
也是一个保留词,需要相同的处理。
insert into test("DATE", ...
当这样引用时,大小写必须与表定义中使用的大小写匹配。
保留字词和关键字的完整列表:Oracle (12c) SQL Reserved Words and Keywords