2016-04-09 6 views
0

Ich habe einige Node-Red-Flows, die als REST-Schnittstelle zu einer Webanwendung dienen, an der ich gerade arbeite. Allerdings bin ich mit einer Einfügetransaktion auf MySQL in eine Wand geraten.ER_PARSE_ERROR während der Einfügetransaktion mit Node-Red

Die Abfrage in den mysql Knoten zugeführt wird, ist:

START TRANSACTION; 
INSERT INTO `light_schedule` (`name`, `light_pwm`, 
    `accent_pwm_red`, `accent_pwm_green`, `accent_pwm_blue`, `strobe`, 
    `start_date`, `start_time`, `end_date`, `end_time`, `repeat_type`, 
    `repeat_every`, `repeat_sunday`, `repeat_monday`, `repeat_tuesday`, 
    `repeat_wednesday`, `repeat_thursday`, `repeat_friday`, `repeat_saturday`, 
    `repeat_by`, `end_after_num`, `end_on`, `is_template`) 
VALUES ('example', NULL, NULL, NULL, NULL, 1, '2016-4-1', NULL, NULL, NULL, 2, 1, 1, 1, 1, 
    1, 1, 1, 1, NULL, NULL, NULL, 0); 

SET @schedule = LAST_INSERT_ID(); 

INSERT INTO `strobe_colors` (`schedule_id`, `order_index`, 
    `duration`, `accent_pwm_red`, `accent_pwm_green`, `accent_pwm_blue`, 
    `rainbow`) 
VALUES (@schedule, 0, 4600, NULL, NULL, NULL, 1), 
     (@schedule, 1, 4100, 150, 200, 163, 0); 

INSERT INTO `lights_schedules` (`light_id`, `schedule_id`) 
VALUES (5, @schedule), 
     (6, @schedule); 

COMMIT; 

Diese Abfrage funktioniert perfekt, wenn ich es in phpMyAdmin das Abfragefenster kopieren und einfügen. Allerdings, wenn ich versuche, es mir durch den Fluss zu feuern, erhalte ich eine Fehlermeldung:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO 
`light_schedule` (`name`, `light_pwm`, `accent_pwm_red`, `accent_pw' at line 2 

ich nicht in der Lage gewesen bin sehr große Fortschritte auf diesem Fehler zu machen. Das nächste, was ich als hilfreich empfunden habe, war der Rat, sicherzustellen, dass ich Backticks für alle Spalten und Tabellennamen hatte, was ich vergebens getan habe.

+0

versuchen, einfache Anführungszeichen anstelle von Backticks – hardillb

+0

@hardillb, gerade versucht, keine Freude leider. –

Antwort

0

Es scheint, dass dies eine Einschränkung des mysql-Knotens für node-red ist. Ich versuchte, meine Anfrage auf die einfachsten Teile zu reduzieren, die ich konnte, und mich von dort aus aufzubauen, um zu sehen, wo die Dinge brachen. Nach einigen Tests und einer Menge Papierkorb, der in meine DB eingefügt wurde, scheint der Knotentyp nicht dafür ausgelegt zu sein, mehrere Abfragen zu verarbeiten, und dazu gehört auch, Transaktionen nicht verarbeiten zu können.

Meine nächste Lösung war es, eine gespeicherte Prozedur zu erstellen, um die Transaktion auszuführen, aber das Testen mit einer trivialen SELECT Prozedur scheint darauf hinzuweisen, dass dieser Knoten auch Probleme mit Prozeduren hat. Egal, welche Berechtigungen ich für die DB eingerichtet habe oder welcher Benutzer die Prozedur erstellt hat, der mysql-Knoten würde behaupten, dass er keine Ausführungsberechtigungen hatte.

Die Lösung, die ich beschlossen habe, bestand darin, eine Kette von mysql-Aufrufen zu erstellen, die relevante Daten über flow.set an Funktionsknoten weiterleiteten. Dies bedeutet, dass ich Transaktionen leider nicht in Anspruch nehmen kann, aber für dieses Projekt sind sie "mehr als eine wichtige Datenbankeigenschaft".

Verwandte Themen