Você precisa iniciar uma nova transação antes do
.drop_all()
ligar; O MySQL vê você lendo da tabela nesta transação e bloqueia a tabela para que não seja descartada:session.commit()
Base.metadata.drop_all()
Confirmar uma transação implicitamente inicia uma nova transação.
O MySQL faz garantias sobre o isolamento de transações; sua transação lerá dados consistentes e não verá as alterações confirmadas por outras transações até que você inicie uma nova transação. Uma
DROP TABLE
No entanto, torna impossível para o MySQL manter essas garantias, então a tabela está sendo bloqueada. Alternativamente, você pode alterar o nível de isolamento da transação, dizendo ao MySQL que você não se importa com as garantias de isolamento. Como as conexões de sessão são agrupadas, isso só pode ser feito para todas as conexões ou para nenhuma; use o
isolation_level
argumento para create_engine()
:engine = create_engine(
'mysql://username:[email protected]/databasename',
isolation_level='READ UNCOMMITTED')
Consulte o
SET TRANSACTION
documentação
para obter detalhes sobre cada nível de isolamento.