Anda harus memulai transaksi baru sebelum .drop_all()
panggilan; MySQL melihat Anda membaca dari tabel dalam transaksi ini, dan mengunci tabel agar tidak dijatuhkan:
session.commit()
Base.metadata.drop_all()
Melakukan transaksi secara implisit memulai transaksi baru.
MySQL membuat jaminan tentang isolasi transaksi; transaksi Anda akan membaca data yang konsisten dan tidak akan melihat perubahan yang dilakukan oleh transaksi lain sampai Anda memulai transaksi baru. Sebuah DROP TABLE
pernyataan tersebut membuat MySQL tidak mungkin untuk menjaga jaminan ini sehingga tabel dikunci.
Atau, Anda dapat mengubah tingkat isolasi transaksi, memberi tahu MySQL bahwa Anda tidak peduli dengan jaminan isolasi. Karena koneksi sesi dikumpulkan, ini hanya dapat dilakukan untuk semua koneksi atau tidak sama sekali; gunakan isolation_level
argumen ke create_engine()
:
engine = create_engine(
'mysql://username:[email protected]/databasename',
isolation_level='READ UNCOMMITTED')
Lihat SET TRANSACTION
dokumentasi
untuk detail tentang setiap tingkat isolasi.