我正在尝试将以下参数解析为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
,错误消息也表明存在此问题。我不知道我哪里出错了。我该如何解决这个问题?
答案 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)
);