2017-08-09 226 views
0

當我批量插入到Oracle使用Python這樣的,它引發錯誤:DatabaseError:ORA-00928:缺少SELECT關鍵字時,我插入到Oracle使用Python

DatabaseError: ORA-00928: missing SELECT keyword 

,我試圖插入只有一行在每個循環中,它仍然會拋出這個錯誤。 在我的甲骨文,我使用的序列,使列ID本身增加,然後在這裏我不插入數據到ID,我認爲沒有必要插入值列ID,我不知道是否是真的這個。我需要你的幫助,非常感謝!

db = cx_Oracle.connect("*","*","*") # 打開數據庫連接 
 
    print db 
 
    cursor = db.cursor() # 使用cursor()方法獲取操作遊標 
 

 
    begin=datetime.date(2017,1,1) 
 
    end=datetime.date(2017,1,5) 
 
    result=[] 
 
    for i in range((end-begin).days+1): 
 
     print i 
 
     day=begin+datetime.timedelta(days=i) 
 
     a=(str(day),1,1,day.strftime("%Y-%m-%d 00:00:00"),1,day.strftime("%Y-%m-%d 00:00:00"),0) 
 
     print a 
 
     result.append(a) 
 
    
 
    print result 
 
    sql = "INSERT INTO calendar(date,type,created_user,created_at,updated_user,updated_at,deleted) VALUES (:1, :2, :3, :4, :5, :6, :7)" 
 
    cursor.prepare(sql) 
 
    cursor.executemany(None,result) #執行SQL語句

+0

請張貼'calendar'表 – mic4ael

+0

什麼是你傳給插入值的結構? – user7294900

+0

創建表 「factory_calendar」 ( 「ID」 數(11)不爲空, 「日期」 的日期, 「類型」 號碼(11), 「created_user」 號(11), 「created_at」 日期, 「updated_user」 號(11), 「的updated_at」 日期, 「已刪除」 號(11), 約束pk_factory_calendar主鍵( 「ID」) ) @ mic4ael – fengnan

回答

0

根據你的表,我可以告訴這個問題的結構,就在於缺乏價值id列在您的INSERT聲明。您沒有爲您的主鍵提供價值。你INSERT應該使用一個示例的序列:

CREATE SEQUENCE sequence_name 
START WITH  1 
INCREMENT BY 1 
NOCACHE 
NOCYCLE; 

INSERT INTO calendar(id, date,type,created_user,created_at,updated_user,updated_at,deleted) 
VALUES (sequence_name.nextval, :1, :2, :3, :4, :5, :6, :7) 
+0

但我會在python中運行這個,當我編寫create sequence ... in python,它會拋出錯誤@ mic4ael – fengnan

+0

你需要在運行你的Python腳本之前創建序列 – mic4ael

+0

我已經創建了序列,並且表id現在可以自己增加。那麼我在哪裏我的python腳本錯了?@ mic4ael – fengnan

0

你的意思是這樣的嗎?

cursor = db.cursor() # 使用cursor()方法獲取操作遊標 
 

 
    begin=datetime.date(2017,1,1) 
 
    end=datetime.date(2017,1,5) 
 
    result=[] 
 
    
 
    for i in range((end-begin).days+1): 
 
     print i 
 
     day=begin+datetime.timedelta(days=i) 
 
     a=(str(day),1,1,day.strftime("%Y-%m-%d 00:00:00"),1,day.strftime("%Y-%m-%d 00:00:00"),0) 
 
     print a 
 
     result.append(a) 
 
    
 
    print result 
 
    sql = "INSERT INTO factory_calendar (date,type,created_user,created_at,updated_user,updated_at,deleted) VALUES (seq_factory_calendar.nextval,:2, :3, :4, :5, :6, :7, :8)" 
 
    cursor.prepare(sql) 
 
    cursor.executemany(None,result) #執行SQL語句
@ mic4ael

+0

'factory_calendar(id,date,type' – mic4ael

相關問題