Tengo un procedimiento almacenado en una base de datos MySQL que simplemente actualiza una columna de fecha y devuelve la fecha anterior. Si llamo a este procedimiento almacenado desde el cliente MySQL, funciona bien, pero cuando intento llamar al procedimiento almacenado desde Python usando MySQLdb, parece que no puedo obtener el valor de retorno.Obtener valores devueltos de un procedimiento almacenado de MySQL en Python, usando MySQLdb
Aquí está el código para el procedimiento almacenado:
CREATE PROCEDURE test_stuff.get_lastpoll()
BEGIN
DECLARE POLLTIME TIMESTAMP DEFAULT NULL;
START TRANSACTION;
SELECT poll_date_time
FROM test_stuff.poll_table
LIMIT 1
INTO POLLTIME
FOR UPDATE;
IF POLLTIME IS NULL THEN
INSERT INTO
test_stuff.poll_table
(poll_date_time)
VALUES
(UTC_TIMESTAMP());
COMMIT;
SELECT NULL as POLL_DATE_TIME;
ELSE
UPDATE test_stuff.poll_table SET poll_date_time = UTC_TIMESTAMP();
COMMIT;
SELECT DATE_FORMAT(POLLTIME, '%Y-%m-%d %H:%i:%s') as POLL_DATE_TIME;
END IF;
END
El código que estoy usando para tratar de llamar al procedimiento almacenado es similar a esto:
#!/usr/bin/python
import sys
import MySQLdb
try:
mysql = MySQLdb.connect(user=User,passwd=Passwd,db="test_stuff")
mysql_cursor = mysql.cursor()
results=mysql_cursor.callproc("get_lastpoll",())
print results
mysql_cursor.close()
mysql.close()
except MySQLdb.Error, e:
print "MySQL Error %d: %s" % (e.args[0], e.args[1])
sys.exit(1)
Sé que usted puede hacer Parámetros IN y OUT, pero según lo que puedo determinar a partir de la documentación de MySQLdb, esto no es posible con MySQLdb. ¿Alguien tiene alguna pista de cómo podría obtener los resultados del procedimiento almacenado?
Si lo ejecuto desde una herramienta de SQL, aquí está la salida:
POLL_DATE_TIME
-------------------
2009-02-18 22:27:07
Si ejecuto el script en Python, se vuelve de nuevo un conjunto vacío, así:
()
Cómo pasar el argumento al cursor en este caso – sandeep