2015-12-21 88 views
0

我有一個表:cx_Oracle.DatabaseError:ORA-00947:沒有足夠的值

create table employee (
employee_id NUMBER NOT NULL, 
name VARCHAR2(255) NOT NULL, 
notes  VARCHAR2(4000), 
created_by varchar2(255) not null, 
created_at date default sysdate not null, 
updated_by varchar2(255) not null, 
updated_at date default sysdate not null, 
PRIMARY KEY(vendor_id) 
); 

所以當我從SQL開發插入:

insert into employee(employee_id, name,notes) values(1,'xyz','test'); 

它自動填充create_by,created_at,和的updated_at updated_by。

行插入成功。

而如果我嘗試使用cx_Oracle模塊在python插入,

cursor.execute("INSERT INTO employee VALUES (:employee_id,:name,:notes)", 
          { 
          'employee_id' : max_value, 
          'name' : each_vendor, 
          'notes' : 'test' 
          } 
          ) 

它拋出錯誤說沒有足夠的值。

爲什麼我得到這個錯誤?我該如何解決它?

+0

你確定它工作在SQL Developer中?您沒有爲created_by或updated_by列指定任何默認值,因此無論您從哪裏運行該插入語句,都會預期它會失敗。 – Boneist

+0

您是否檢查過變量的值? max_value和each_vendor – Diver

回答

0

答案很簡單,並且與python無關。你的2 insert陳述是非常不同的。

在第1箇中,您明確指定了要爲其提供值的列:(employee_id, name,notes)。但是,在Python中使用的insert語句中,不會按名稱指定3列。因此,您的insert聲明期望您提供表中所有列的值。

的修補程序:明確命名的3列:

cursor.execute("INSERT INTO employee (employee_id, name, notes) VALUES (:employee_id,:name,:notes)", 
          { 
          'employee_id' : max_value, 
          'name' : each_vendor, 
          'notes' : 'test' 
          } 
          )