Python / SQLite3引发函数错误

时间:2014-01-15 16:38:12

标签: python triggers sqlite raise

我的触发器中的RAISE功能出现了小问题。这是我的SQLite代码:

CREATE TRIGGER CheckingDate
BEFORE INSERT ON MyTable
FOR EACH ROW
WHEN NEW.Start_date > NEW.End_date
BEGIN
RAISE(ABORT, 'End_date must be in the future');
END;

Start_dateend_dateSMALLDATETIMEStart_datedatetime('now')的结果。

我在我的python 2.7程序中使用sqlite3.complete_statement()的所有其他sql脚本运行它,它给出了Syntax Error near RAISE。有人可以告诉我为什么吗?我在触发器中尝试了ABORTROLLBACK,而不是ABORTSELECT CASEWHEN THEN,但仍然出错;

1 个答案:

答案 0 :(得分:1)

RAISE()是一个SQL函数,你需要将它作为语句的一部分使用; TRIGGER仅允许UPDATEINSERTDELETESELECT声明;在SELECT

中使用它
CREATE TRIGGER CheckingDate
BEFORE INSERT ON MyTable
FOR EACH ROW
WHEN NEW.Start_date > NEW.End_date
BEGIN
SELECT RAISE(ABORT, 'End_date must be in the future');
END;

这会正确触发错误:

sqlite> insert into mytable values ('2030-1-1 20:20:20', datetime('now'));
Error: End_date must be in the future