cx_Oracle.DatabaseError:ORA-00947:值不够

时间:2015-12-21 11:00:02

标签: oracle python-2.7 cx-oracle

我有一张桌子:

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。

行成功插入。

然而,如果我尝试在python中使用cx_Oracle模块插入,

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

它会抛出错误,说没有足够的值。

为什么会出现此错误?我该如何解决?

1 个答案:

答案 0 :(得分: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'
                             }
                            )