आपको .drop_all() . से पहले एक नया लेन-देन शुरू करना होगा बुलाना; MySQL आपको इस लेन-देन में तालिका से पढ़ते हुए देखता है, और तालिका को गिराए जाने के विरुद्ध लॉक करता है:
session.commit()
Base.metadata.drop_all()
कोई लेन-देन करना परोक्ष रूप से एक नया लेन-देन शुरू करता है।
MySQL लेनदेन अलगाव के बारे में गारंटी देता है; आपका लेन-देन सुसंगत डेटा को पढ़ेगा और जब तक आप कोई नया लेन-देन शुरू नहीं करते, तब तक अन्य लेन-देन द्वारा किए गए परिवर्तन नहीं देखेंगे। एक ड्रॉप टेबल स्टेटमेंट हालांकि MySQL के लिए इन गारंटियों को रखना असंभव बना देता है इसलिए टेबल को लॉक किया जा रहा है।
वैकल्पिक रूप से, आप लेनदेन अलगाव स्तर को बदल सकते हैं, MySQL को बताकर कि आपको अलगाव की गारंटी की परवाह नहीं है। क्योंकि सत्र कनेक्शन पूल किए गए हैं, यह केवल सभी कनेक्शनों के लिए किया जा सकता है या बिल्कुल भी नहीं; आइसोलेशन_लेवल का उपयोग करें create_engine()
:
engine = create_engine(
'mysql://username:example@sqldat.com/databasename',
isolation_level='READ UNCOMMITTED')
देखें SET TRANSACTION दस्तावेज़ीकरण
प्रत्येक अलगाव स्तर के बारे में विवरण के लिए।