Maneiras de evitar “Comandos fora de sincronia do MySQLdb; você não pode executar este comando agora ”(2014) exceção

O código a seguir, usando python 2.6.6 e MySQLdb 1.2.2, causaComandos fora de sincronia; você não pode executar este comando agora Exceção do 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;" )

A exceção é gerada durante a execução da segunda consulta. Como eu li, a exceção geralmente é causada por limitações da implementação da API C do MySQL, que proíbem a execução simultânea de consultas.

Se eu recriar o objeto cursor entre as duas consultas acima, o problema será resolvido, mas infelizmente a solução não parece perfeita para mim. Eu tenho uma abstração muito simples sobre a conexão com o banco de dados e a execução da consulta e preferiria não recriar o cursor após cada execução da consulta, pois ela (até onde eu entendi) confirma a transação atual e potencialmente tem outros efeitos colaterais.

Portanto, minha pergunta é: Quais são outras maneiras de evitar essa exceção? Como preparar o objeto cursor para execução da próxima consulta? Talvez exista algum método esperado pela API do Python DB, que seria relativamente neutro ao usar outras interfaces de banco de dados e contornará o problema no caso do MySQLdb?

Agradecemos antecipadamente pelo seu tempo e ajuda :)

Editar: Depois de postar a pergunta, comecei a ler as especificações da API do DB Python para ler sobre os efeitos colaterais da destruição do cursor (não tenho mais tanta certeza sobre o commit da transação :)) e achei o seguinte, alternativa 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 );

O problema é que não sei o que faz (retorna1 duas vezes eNone depois disso). Devo cavar nessa direção? Quero dizer, devo entender o conceito desses conjuntos para encontrar solução para o meu problema?

questionAnswers(1)

yourAnswerToTheQuestion