2017-05-12 8 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) 

これは、次のエラーを生成します。第二CREATE TRIGGER文が削除されたときsqlite3.OperationalError: near "CREATE": syntax error

エラーが消えます。

何がありますか?声明で何が間違っているのかわかりません...

+2

'END CREATE'は無効です。あなたのクエリを実際のSQLクライアントにテストしてみてください –

+0

pythonの人ではなく、あなたの引用符は有効ですか? –

+0

あなたは '' 'の代わりに' \ "'を使ってみましたか? –

答えて

0

ENDキーワードの後に​​セミコロンを付けると、問題が解決します。

関連する問題