PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

SQLAlchemy के माध्यम से Postgresql के साथ कई कथनों को निष्पादित करना परिवर्तन जारी नहीं रखता है

SQLAlchemy का ऑटोोकॉमिट जिस तरह से काम करता है वह यह है कि यह जारी किए गए बयानों का निरीक्षण करता है, यह पता लगाने की कोशिश करता है कि डेटा संशोधित है या नहीं:

<ब्लॉकक्वॉट>

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

चूंकि एकाधिक परिणाम सेट SQLAlchemy स्तर पर समर्थित नहीं हैं, इसलिए आपके पहले उदाहरण में डिटेक्शन केवल COMMIT जारी करना छोड़ देता है क्योंकि पहला कथन एक चयन है, जहां आपके दूसरे उदाहरण में यह एक अद्यतन है। एकाधिक कथनों से डेटा संशोधित करने वाले कथनों का पता लगाने का कोई प्रयास नहीं होता है।

यदि आप PGExecutionContext.should_autocommit_text() को देखते हैं , आप देखेंगे कि यह AUTOCOMMIT_REGEXP के विरुद्ध एक रेगेक्स मिलान करता है . दूसरे शब्दों में यह केवल पाठ की शुरुआत में ही मेल खाता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में NULL की n पंक्तियाँ उत्पन्न करें

  2. plpgsql के साथ फ़ंक्शन के अंदर वर्तमान फ़ंक्शन का नाम प्राप्त करना

  3. क्या आप CREATE TABLE परिभाषा में एक इंडेक्स बना सकते हैं?

  4. IN मूल्य सूची द्वारा ऑर्डर करें

  5. मैं PostgreSQL में अस्थायी रूप से ट्रिगर्स को कैसे अक्षम कर सकता हूं?