Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O carregador de relacionamento do SQL Alchemy deixa um bloqueio na tabela?


Você precisa iniciar uma nova transação antes do .drop_all() ligar; O MySQL vê você lendo da tabela nesta transação e bloqueia a tabela para que não seja descartada:
session.commit()
Base.metadata.drop_all()

Confirmar uma transação implicitamente inicia uma nova transação.

O MySQL faz garantias sobre o isolamento de transações; sua transação lerá dados consistentes e não verá as alterações confirmadas por outras transações até que você inicie uma nova transação. Uma DROP TABLE No entanto, torna impossível para o MySQL manter essas garantias, então a tabela está sendo bloqueada.

Alternativamente, você pode alterar o nível de isolamento da transação, dizendo ao MySQL que você não se importa com as garantias de isolamento. Como as conexões de sessão são agrupadas, isso só pode ser feito para todas as conexões ou para nenhuma; use o isolation_level argumento para create_engine() :
engine = create_engine(
    'mysql://username:[email protected]/databasename',
    isolation_level='READ UNCOMMITTED')

Consulte o SET TRANSACTION documentação para obter detalhes sobre cada nível de isolamento.