Formas de evitar los "Comandos de MySQLdb fuera de sincronización; no puede ejecutar este comando ahora "(2014) excepción

El siguiente código, usando python 2.6.6 y MySQLdb 1.2.2 causaComandos fuera de sincronización; no puedes ejecutar este comando ahora Excepción MySQLdb:

import MySQLdb

conn = MySQLdb.connect( db="test", user="root" )
cursor = conn.cursor( MySQLdb.cursors.DictCursor )

cursor.execute( "BEGIN; CREATE TABLE t1 ( t1_id INT PRIMARY KEY AUTO_INCREMENT ); COMMIT;" )
cursor.execute( "BEGIN; CREATE TABLE t2 ( t2_id INT PRIMARY KEY AUTO_INCREMENT ); COMMIT;" )

La excepción se genera durante la ejecución de la segunda consulta. Mientras leo, la excepción generalmente es causada por limitaciones de la implementación de la API C de MySQL, que no permiten la ejecución simultánea de consultas.

Si vuelvo a crear el objeto cursor entre las dos consultas anteriores, el problema se soluciona pero desafortunadamente la solución no me parece perfecta. Tengo una abstracción muy simple sobre la conexión de la base de datos y la ejecución de la consulta y preferiría no volver a crear el cursor después de cada ejecución de la consulta, ya que (por lo que yo entiendo) comprometerá la transacción actual y posiblemente tenga otros efectos secundarios.

Por lo tanto, mi pregunta es: ¿Cuáles son otras formas de evitar esta excepción? ¿Cómo preparar el objeto cursor para la ejecución de la próxima consulta? ¿Quizás haya algún método esperado por la API de Python DB, que sería relativamente neutral al usar otras interfaces de base de datos y solucionará el problema en caso de MySQLdb?

Gracias de antemano por su tiempo y ayuda :)

Editar: Después de publicar la pregunta, comencé a leer las especificaciones de la API de Python DB para leer sobre los efectos secundarios de la destrucción del cursor (ya no estoy tan seguro sobre la confirmación de la transacción :)) y encontré lo siguiente, una solución alternativa:

cursor.execute( "BEGIN; CREATE TABLE t1 ( t1_id INT PRIMARY KEY AUTO_INCREMENT ); COMMIT;" )
while cursor.nextset() is not None: pass
cursor.execute( "BEGIN; CREATE TABLE t2 ( t2_id INT PRIMARY KEY AUTO_INCREMENT );

El problema es que no sé qué hace (vuelve1 dos veces yNone después de esto). ¿Debo cavar en esta dirección? Quiero decir, ¿debo entender el concepto de estos conjuntos para encontrar una solución a mi problema?

Respuestas a la pregunta(1)

Su respuesta a la pregunta