Ho una procedura memorizzata in un database MySQL che aggiorna semplicemente una colonna di data e restituisce la data precedente. Se chiamo questa procedura memorizzata dal client MySQL, funziona bene, ma quando provo a richiamare la procedura memorizzata da Python usando MySQLdb non riesco a convincerlo a darmi il valore restituito.Ottenere valori di ritorno da una procedura memorizzata MySQL in Python, utilizzando MySQLdb
Ecco il codice per la stored procedure:
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
Il codice che sto usando per cercare di chiamare la stored procedure è simile a questo:
#!/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)
So che si può fare Parametri IN e OUT, ma da quello che posso determinare dalla documentazione MySQLdb, questo non è possibile con MySQLdb. Qualcuno ha qualche idea su come ottenere i risultati della stored procedure?
Se l'eseguo da uno strumento di SQL, ecco l'output:
POLL_DATE_TIME
-------------------
2009-02-18 22:27:07
Se eseguo lo script Python, esso ritorna un insieme vuoto, in questo modo:
()
Come passare argomento al cursore in questo caso – sandeep