2017-05-12 60 views
0

我想在Python(3.5)下的SQLite3中创建一些SQL触发器。我的SQL触发器创建语句有什么问题?

我的测试用例如下:

#! /usr/bin/env python 
import sqlite3 

sql_init = """ 
    CREATE TABLE ajxp_changes (seq INTEGER PRIMARY KEY AUTOINCREMENT, node_id NUMERIC, type TEXT, source TEXT, target TEXT, deleted_md5 TEXT); 
    CREATE TABLE ajxp_index (node_id INTEGER PRIMARY KEY AUTOINCREMENT, node_path TEXT, bytesize NUMERIC, md5 TEXT, mtime NUMERIC, stat_result BLOB); 

    CREATE TRIGGER LOG_DELETE AFTER DELETE ON ajxp_index BEGIN INSERT INTO ajxp_changes (node_id,source,target,type,deleted_md5) VALUES (old.node_id, old.node_path, "NULL", "delete", old.md5); END 
    CREATE TRIGGER LOG_INSERT AFTER INSERT ON ajxp_index BEGIN INSERT INTO ajxp_changes (node_id,source,target,type) VALUES (new.node_id, "NULL", new.node_path, "create"); END 
    """ 

conn = sqlite3.connect(":memory:") 
conn.executescript(sql_init) 

这将产生以下的错误:sqlite3.OperationalError: near "CREATE": syntax error

当第二CREATE TRIGGER语句除去误差消失。

什么给?我无法弄清楚我的声明有什么问题...

+2

'END CREATE'无效。尝试测试您的查询到一个实际的SQL客户端 –

+0

不是一个Python的家伙,但是你的报价有效吗? –

+0

您是否尝试使用'\“而不是'''? –

回答

0

在每个END关键字后面添加分号可修复此问题。