2016-05-24 17 views
3

Ich versuche, eine benutzerdefinierte Funktion in eine Trigger-Klausel in SQLite mit Python zu integrieren, kann ich die benutzerdefinierte Funktion aufrufen, wenn ich nur die benutzerdefinierte aufrufen Funktion, jedoch versuche ich die benutzerdefinierte Funktion in einem Trigger-Klausel enthaltenSQLITE 3 Wie fügt man eine benutzerdefinierte Funktion in eine Trigger-Klausel ein Python

Diese meine benutzerdefinierte Funktion Schöpfung

self.conn.create_function("autocsvok", 1, self.syslog_autocsv) 

Diese Funktion meine Callback-python ist

def syslog_autocsv(self,value): 
    print value 

Ich bin in der Lage, die Callback-Funktion aufrufen, auf

sql2='select autocsvok("ss")' 
    self.cur.execute(sql2) 

Das gibt mir Ausgabe

ss 

jedoch Jetzt versuche ich, die benutzerdefinierte Funktion in einem Trigger-Klausel enthalten

sql3='''CREATE TRIGGER liiasssaa BEFORE INSERT ON syslog BEGIN 
      select autocsvok("55") 
      END''' 
self.cur.execute(sql3) 
print self.cur.fetchone()[0] 

Dies gibt mir den folgenden Fehler

File "syslog.py", line 105, in syslog_createfunction 
self.cur.execute(sql1) 
sqlite3.OperationalError: near "END": syntax error 
012 Helfen Sie mir

bitte :)

Antwort

2

Siehe Abschnitt der Grammatik zwischen BEGIN und END https://www.sqlite.org/lang_createtrigger.html

Der Ausdruck muss mit einem Semikolon abgeschlossen werden. Die select Ihres Auslösers wird nicht durch ein Semikolon beendet.

+0

mob Der Trigger wird jetzt aufgerufen, aber wenn die Trigger-Funktion ausgeführt wird, sagt es keine solche Funktion: autocsvok, obwohl die Funktion existiert –

+0

danke, hat nicht meine Create_function commit –

Verwandte Themen