U moet een nieuwe transactie starten vóór de .drop_all()
telefoongesprek; MySQL ziet u lezen van de tafel in deze transactie en vergrendelt de tafel tegen vallen:
session.commit()
Base.metadata.drop_all()
Als u een transactie uitvoert, wordt impliciet een nieuwe transactie gestart.
MySQL geeft garanties over transactie-isolatie; uw transactie leest consistente gegevens en ziet geen wijzigingen die door andere transacties zijn vastgelegd totdat u een nieuwe transactie start. EEN DROP TABLE
verklaring maakt het echter onmogelijk voor MySQL om deze garanties te behouden, zodat de tafel wordt vergrendeld.
Als alternatief kunt u het transactie-isolatieniveau wijzigen en MySQL vertellen dat u niets geeft om de isolatiegaranties. Omdat sessieverbindingen worden gepoold, kan dit alleen voor alle verbindingen of helemaal niet worden gedaan; gebruik het isolation_level
argument to create_engine()
:
engine = create_engine(
'mysql://username:[email protected]/databasename',
isolation_level='READ UNCOMMITTED')
Zie de SET TRANSACTION
documentatie
voor details over elk isolatieniveau.