Debe iniciar una nueva transacción antes de .drop_all()
llamar; MySQL lo ve leyendo de la tabla en esta transacción y bloquea la tabla para que no se descarte:
session.commit()
Base.metadata.drop_all()
Confirmar una transacción inicia implícitamente una nueva transacción.
MySQL ofrece garantías sobre el aislamiento de transacciones; su transacción leerá datos coherentes y no verá los cambios realizados por otras transacciones hasta que inicie una nueva transacción. Una DROP TABLE
Sin embargo, la declaración hace imposible que MySQL mantenga estas garantías, por lo que la tabla está bloqueada.
Alternativamente, podría alterar el nivel de aislamiento de la transacción, diciéndole a MySQL que no le importan las garantías de aislamiento. Debido a que las conexiones de sesión están agrupadas, esto solo se puede hacer para todas las conexiones o para ninguna; usa el isolation_level
argumento para create_engine()
:
engine = create_engine(
'mysql://username:[email protected]/databasename',
isolation_level='READ UNCOMMITTED')
Consulte el SET TRANSACTION
documentación
para obtener detalles sobre cada nivel de aislamiento.