IntegrityError:ORA-01400:无法插入NULL

时间:2017-04-06 11:14:56

标签: python sql oracle oracle-sqldeveloper cx-oracle

我正在尝试将以下参数解析为cursor.execute

sql_insert = 'insert into sms_messaging (result_sms, msgid, msgparts) values (:1, :2, :3)'
smsreport_text_new = ('success', '2D67C865FB6FA25A9261C75E8D2F0F2B ', 1)

cursor.execute(sql_insert, smsreport_text_new)

之后我收到以下错误消息:

IntegrityError: ORA-01400: cannot insert NULL into ("ADAUTH"."SMS_MESSAGING"."DATE_SMS")

为了构建表,我的.sql文件如下所示:

-- Create template
CREATE TABLE sms_messaging(
  date_sms DATE primary key,
  result_sms VARCHAR(20),
  msgid VARCHAR(128),
  msgparts INTEGER,
  errorcode INTEGER,
  errormessage VARCHAR(128)
);

即使对于此特定sql_insert没有date_sms,错误消息也表明存在此问题。我不知道我哪里出错了。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

问题是您有一个DATE_SMS列声明为NOT NULL并且没有默认值。你需要给它一个值。我不知道它应该是什么,但也许是这样的:

insert into sms_messaging (result_sms, msgid, msgparts, date_sms)
    values (:1, :2, :3, sysdate);

这会将当前日期/时间放入字段中。

答案 1 :(得分:2)

问题是DATE_SMS列是主键,因此它不接受NULL值。由于您没有在该列的insert语句中提供值,这就是您收到错误的原因。

我不确定oracle,但在SQL Server中,您可以为列设置默认值,因此我会将'GETDATE()`设置为日期列的默认值。也许甲骨文也有。

答案 2 :(得分:1)

您不应该将DATE_SMS作为主键!而是使用msg_id

CREATE TABLE sms_messaging(
  date_sms DATE,
  result_sms VARCHAR(20),
  msgid VARCHAR(128) primary key,
  msgparts INTEGER,
  errorcode INTEGER,
  errormessage VARCHAR(128)
);