Rückgabewert von MySQL-Funktion
Hallo,
ich habe für eine mySQL-Abfrage eine eigene Funktion erstellt und abgespeichert:
Soweit so gut, das funktioniert wenn ich es in phpMyAdmin ausführe. Frage: Wie führe ich es aus Python aus?
Ich versuchte es so:
Normale SQL-Abfragen funktionieren so, meine eigene nicht. Weder wird die Funktion ausgeführt noch bekomme ich eine Rückmeldung (Aber auch keine Fehlermeldung). Ich habe es auch mit cursor.callproc() versucht, aber das scheint auch wirklich nur mit Procedures zu funktionieren.
Wie kann ich die Funktion ausführen und den Int-Rückgabewert bekommen? Ich stehe hier etwas auf dem Schlauch, kenne mich auch nicht wirklich gut mit Python aus...
ich habe für eine mySQL-Abfrage eine eigene Funktion erstellt und abgespeichert:
DELIMITER //
CREATE FUNCTION checkInOut ( memberID INT, stationID INT, minMinutes INT, maxHours INT )
RETURNS INT
BEGIN
DECLARE indx INT;
DECLARE tin TIMESTAMP;
DECLARE tout TIMESTAMP;
-- Als erstes hohlen wir uns das letzte Ereignis dieses Mitgliedes
SELECT `index`, `in`, `out` INTO indx, tin, tout FROM `log`
WHERE `member` = memberID
AND `station` = stationID
ORDER BY `index` DESC
LIMIT 1;
-- CheckIn - oder Out?
IF tout IS NULL THEN
-- Checkout-Ereignis
-- Checkin weniger als 5 Minuten her?
IF TIMESTAMPDIFF(MINUTE, tin, NOW()) < minMinutes THEN
-- "Ereignis verwerfen" zurückgeben
RETURN 0;
END IF;
-- Checkin weniger als 8 Stunden her?
IF TIMESTAMPDIFF(HOUR, tin, NOW()) < maxHours THEN
-- Checkout speichern
UPDATE `log` SET `out` = NOW()
WHERE `index` = indx;
-- Erfolgreichen Checkout Zurückgeben
RETURN 2;
END IF;
END IF;
-- CheckIn-Ereignis
INSERT INTO `log` (`member`, `station`, `in`, `out`)
VALUES (memberID, stationID, NOW(), NULL);
-- Erfolgreichen Checkin zurückgeben
RETURN 1;
END; //
DELIMITER ;
Soweit so gut, das funktioniert wenn ich es in phpMyAdmin ausführe. Frage: Wie führe ich es aus Python aus?
Ich versuchte es so:
cursor = mysql.cursor()
sql = ("SELECT checkInOut(%s, %s, 5, 8);") % (memberID, stationID)
try:
cursor.execute(sql)
except MySQLdb.Error, e:
mysql.rollback()
print("Fehler [%d]: %s" % (e.args, e.args[1]))
sys.exit(e.args)
mysql.commit()
ret = cursor.fetchone()
print (ret)
Wie kann ich die Funktion ausführen und den Int-Rückgabewert bekommen? Ich stehe hier etwas auf dem Schlauch, kenne mich auch nicht wirklich gut mit Python aus...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 275163
Url: https://administrator.de/contentid/275163
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
4 Kommentare
Neuester Kommentar
Mach doch eine Stored Procedure aus der Funktion:
http://www.mysqltutorial.org/calling-mysql-stored-procedures-python/
Gruß jodel32
http://www.mysqltutorial.org/calling-mysql-stored-procedures-python/
Gruß jodel32