मैं स्क्लेक्लेमी के लिए नया हूं और मूल लेखक तक पहुंच के बिना कुछ हद तक गन्दा कोडबेस प्राप्त किया है।मुझे स्क्लेक्लेमी पर फ्लश() कब कॉल करना चाहिए?
कोड DBSession.flush()
पर कॉल के साथ लाइट किया गया है, प्रतीत होता है कि लेखक यह सुनिश्चित करना चाहता था कि डेटा सहेजा जा रहा है। सबसे पहले मैं सिर्फ इस कोड में देखे गए पैटर्न का पालन कर रहा था, लेकिन जैसा कि मैं दस्तावेज़ पढ़ रहा हूं, ऐसा लगता है कि यह अनावश्यक है - ऑटोफ्लशिंग को जगह में होना चाहिए। इसके अतिरिक्त, मुझे कुछ मामलों में एजेक्स कॉल के साथ मिल गया है जो त्रुटि उत्पन्न करते हैं "अवैधRequestError: सत्र पहले से ही फ्लश कर रहा है"।
मैं किस परिदृश्य के तहत वैध रूप से फ्लश() को कॉल करना चाहता हूं?
यह एक पिरामिड अनुप्रयोग है, और SQLAlchemy के साथ स्थापित किया जा रहा है: pyramid_tm
साथ संयोजन के रूप में
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension(), expire_on_commit=False))
Base = declarative_base()
बहुत बहुत धन्यवाद। अनुवर्ती: expire_on_commit = इस सेटअप में गलत होने का वास्तव में एक अच्छा कारण क्या है? (मुझे नहीं पता कि यह पहली जगह क्यों स्थापित किया गया था)। – blocks
मेरे अनुभव में, यह उन लोगों द्वारा उपयोग किया जाता है जो नहीं जानते कि वे क्या कर रहे हैं और प्रतिबद्ध होने के बाद वस्तुओं का उपयोग करके सिस्टम को धोखा देने का प्रयास करें। * जाहिर है * एक प्रतिबद्धता के बाद, आपको कोई गारंटी नहीं है कि उस वस्तु की स्थिति अब मान्य है। –
@ माइकल मरिकेल - बहुत अच्छी तरह से समझाया गया। कैसे हमें फ्लश() का उपयोग नहीं करना चाहिए? [क्या कोड के भीतर SQLAlchemy फ्लश() को कॉल करने से कोई दुष्प्रभाव हैं?] (Http://stackoverflow.com/questions/29338419/are-there-any-side-effects-from-calling-sqlalchemy-flush-within-code) –