2017-11-29 23 views
0

저는 신탁 신참입니다. 판다 데이터 프레임을 오라클 테이블에 삽입하려고합니다. 온라인으로 연구를했는데 코드 자체 (https://www.snip2code.com/Snippet/704409/Insert-pandas-dataframe-to-Oracle-databa/)는 매우 간단해야하지만 내 코드가 작동하지 않는 이유를 모르겠습니다.DatabaseError : ORA-00928 : SELECT 키워드가 누락되었습니다

내 로컬 파일에서 팬더 dataframe 읽고

:

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  

가 그럼 난 사용하여 데이터베이스와의 연결을 만들

다음 dataframe 안양은 다음과 같이 마땅한

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의 인쇄를 cx_Oracle. 다음으로 데이터 프레임 df를 TEST 테이블에 삽입하려고합니다. 이 테이블 TEST는 Oracle 데이터베이스에 이미있는 빈 테이블이며 Oracle에 DATE, YEAR, MONTH, SOURCE, DESTINATION 등의 열이 있습니다. 모든 데이터 유형은 df의 데이터와 일치합니다.

DatabaseError: ORA-00928: missing SELECT keyword

어떻게 문제를 해결하기 위해 :

conn_str = u'account/[email protected]: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() 

그것은 오류 표시 다음과 같이 내 코드는? 시간 내 주셔서 대단히 감사합니다!

답변

1

DATE은 Oracle SQL의 예약어입니다. 당신은 그것을 인용해야합니다 (또는 컬럼의 이름을 예약어가 아닌 것으로 바꿔야합니다). YEAR도 예약어이므로 동일한 치료가 필요합니다.

insert into test("DATE", ... 

이와 같이 인용 할 때는 대소 문자가 표 정의에서 사용 된 것과 일치해야합니다. 예약어 및 키워드

전체 목록 : Oracle (12c) SQL Reserved Words and Keywords

+0

의 내 문제를 해결 감사합니다! –