Multiple result sets in MySQL Connector/Python

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.