.drop_all()
の前に新しいトランザクションを開始する必要があります 電話; MySQLは、このトランザクションでテーブルからの読み取りを確認し、テーブルが削除されないようにロックします。
session.commit()
Base.metadata.drop_all()
トランザクションをコミットすると、暗黙的に新しいトランザクションが開始されます。
MySQLはトランザクション分離について保証します。トランザクションは一貫性のあるデータを読み取り、新しいトランザクションを開始するまで他のトランザクションによってコミットされた変更を確認しません。 DROP TABLE
ただし、ステートメントを使用すると、MySQLがこれらの保証を維持できなくなるため、テーブルがロックされます。
または、トランザクション分離レベルを変更して、分離保証を気にしないようにMySQLに指示することもできます。セッション接続はプールされるため、これはすべての接続に対してのみ実行できるか、まったく実行できません。 isolation_level
を使用します create_engine()
>
:
engine = create_engine(
'mysql://username:[email protected]/databasename',
isolation_level='READ UNCOMMITTED')
SET TRANSACTION
を参照してください ドキュメント
各分離レベルの詳細については。