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
我是一个新的 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