Devi iniziare una nuova transazione prima di .drop_all()
chiamata; MySQL ti vede leggere dalla tabella in questa transazione e impedisce che la tabella venga eliminata:
session.commit()
Base.metadata.drop_all()
Il commit di una transazione avvia implicitamente una nuova transazione.
MySQL fornisce garanzie sull'isolamento delle transazioni; la tua transazione leggerà dati coerenti e non vedrà le modifiche commesse da altre transazioni fino a quando non avvierai una nuova transazione. Un DROP TABLE
Tuttavia, l'istruzione rende impossibile per MySQL mantenere queste garanzie in modo che la tabella venga bloccata.
In alternativa, potresti alterare il livello di isolamento della transazione, dicendo a MySQL che non ti interessano le garanzie di isolamento. Poiché le connessioni di sessione sono raggruppate, questo può essere fatto solo per tutte le connessioni o per nessuna; usa il isolation_level
argomento per create_engine()
:
engine = create_engine(
'mysql://username:[email protected]/databasename',
isolation_level='READ UNCOMMITTED')
Vedi SET TRANSACTION
documentazione
per i dettagli su ciascun livello di isolamento.