У меня есть хранимая процедура в базе данных MySQL, которая просто обновляет столбец даты и возвращает предыдущую дату. Если я вызываю эту хранимую процедуру из клиента MySQL, она работает нормально, но когда я пытаюсь вызвать хранимую процедуру из Python с использованием MySQLdb, я не могу получить ее, чтобы получить возвращаемое значение.
Вот код хранимой процедуры:
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
Код, который я использую для вызова хранимой процедуры, выглядит примерно так:
#!/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)
Я знаю, что вы можете делать параметры IN и OUT, но из того, что я могу определить из документации MySQLdb, это невозможно с MySQLdb. Кто-нибудь знает, как мне получить результаты хранимой процедуры?
Если я запускаю его из инструмента SQL, вот вывод:
POLL_DATE_TIME
-------------------
2009-02-18 22:27:07
Если я запускаю скрипт Python, он возвращает пустой набор, например:
()