Latest code of MySQL Connector/Python on launchpad has support for multiple result sets when you execute a stored procedure. We also changed the way the actual result of the routine is returned to conform to PEP249.
Here is some example code: it creates a stored procedure which generates 2 result sets. You can get the result by calling next_resultset()
, which is returning a MySQLCursorBuffered
.
cur = cnx.cursor()
cur.execute("DROP PROCEDURE IF EXISTS multi")
proc = """
CREATE PROCEDURE multi(IN pFac1 INT, IN pFac2 INT, OUT pProd INT)
BEGIN
SELECT 1,'a' as FooBar;
SELECT 2;
SET pProd := pFac1 * pFac2;
END"""
cur.execute(proc)
result = cur.callproc("multi", (5, 6, 0))
print "Result:", result
extcur = cur.next_resultset()
i = 1
while extcur:
rows = extcur.fetchall()
print "Result set #%d:" % i
print rows
extcur = cur.next_resultset()
i += 1
cur.close()
The output:
Result: ('5', '6', 30)
Result set #1:
[(1, u'a')]
Result set #2:
[(2,)]
As mentioned above: this will be part of 0.1.4-devel release due next week. Comments are welcome through the associated bug report.