sql >> Base de Datos >  >> RDS >> Mysql

¿El cargador de relaciones de SQL Alchemy deja un candado en la tabla?

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.