Mysql
 sql >> Database >  >> RDS >> Mysql

Il caricatore di relazioni SQL Alchemy lascia un blocco sul tavolo?

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.