SQLAlchemy का ऑटोोकॉमिट जिस तरह से काम करता है वह यह है कि यह जारी किए गए बयानों का निरीक्षण करता है, यह पता लगाने की कोशिश करता है कि डेटा संशोधित है या नहीं:
<ब्लॉकक्वॉट>
..., SQLAlchemy अपनी "ऑटोकॉमिट" सुविधा को लागू करता है जो सभी बैकएंड में पूरी तरह से लगातार काम करती है। यह उन बयानों का पता लगाकर हासिल किया जाता है जो डेटा-चेंजिंग ऑपरेशंस का प्रतिनिधित्व करते हैं, यानी INSERT, UPDATE, DELETE, साथ ही डेटा डेफिनिशन लैंग्वेज (DDL) स्टेटमेंट जैसे CREATE TABLE, ALTER TABLE, और फिर कोई लेनदेन नहीं होने पर स्वचालित रूप से COMMIT जारी करना। . पता लगाना autocommit=True
. की उपस्थिति पर आधारित है कथन पर निष्पादन विकल्प। यदि कथन केवल-पाठ्य कथन है और ध्वज सेट नहीं है, तो किसी विशेष बैकएंड के लिए INSERT, UPDATE, DELETE, साथ ही कई अन्य आदेशों का पता लगाने के लिए एक नियमित अभिव्यक्ति का उपयोग किया जाता है
चूंकि एकाधिक परिणाम सेट SQLAlchemy स्तर पर समर्थित नहीं हैं, इसलिए आपके पहले उदाहरण में डिटेक्शन केवल COMMIT जारी करना छोड़ देता है क्योंकि पहला कथन एक चयन है, जहां आपके दूसरे उदाहरण में यह एक अद्यतन है। एकाधिक कथनों से डेटा संशोधित करने वाले कथनों का पता लगाने का कोई प्रयास नहीं होता है।
यदि आप PGExecutionContext.should_autocommit_text()
को देखते हैं , आप देखेंगे कि यह AUTOCOMMIT_REGEXP
के विरुद्ध एक रेगेक्स मिलान करता है . दूसरे शब्दों में यह केवल पाठ की शुरुआत में ही मेल खाता है।