Sessions are designed to work like this। सत्र बी में ऑब्जेक्ट के गुणों को वही रखा जाएगा जब पहली बार सत्र बी में पूछताछ की गई थी। इसके अतिरिक्त, SQLAlchemy अन्य सत्रों में ऑब्जेक्ट्स को स्वचालित रूप से रीफ्रेश करने का प्रयास नहीं करेगा, और न ही मुझे लगता है कि कुछ बनाने का प्रयास करना बुद्धिमान होगा इस तरह।
आप सक्रिय रूप से डेटाबेस में एक एकल लेनदेन के रूप में प्रत्येक सत्र के जीवन काल के बारे में सोच किया जाना चाहिए। सत्रों को कैसे और कब इस तथ्य से निपटने की आवश्यकता है कि उनकी वस्तुएं पुरानी हो सकती हैं, तकनीकी समस्या नहीं है जिसे एसक्लाक्लेमी (या स्क्लाक्लेमी के लिए कोई भी एक्सटेंशन) में निर्मित एल्गोरिदम द्वारा हल किया जा सकता है: यह एक "व्यवसाय" समस्या है जिसका समाधान आपको चाहिए खुद को निर्धारित और कोड करें। "सही" प्रतिक्रिया यह कह सकती है कि यह कोई समस्या नहीं है: सत्र बी के साथ होने वाला तर्क मान्य हो सकता है यदि सत्र बी शुरू होने के समय डेटा का उपयोग किया जाता है। आपकी "समस्या" वास्तव में एक समस्या नहीं हो सकती है। डॉक्स वास्तव में एक entire section on when to use sessions है, लेकिन यदि आप एक एक आकार फिट सभी समाधान के लिए उम्मीद कर रहे हैं यह एक बहुत गंभीर प्रतिक्रिया देता है ...
एक सत्र आम तौर पर एक तार्किक आपरेशन की शुरुआत में निर्माण किया है जहां डेटाबेस पहुंच संभावित रूप से अनुमानित है।
सत्र, जब भी डेटाबेस से बात करने के लिए उपयोग किया जाता है, तो डाटाबेस लेनदेन शुरू होता है जैसे ही यह संचार शुरू होता है। autocommit ध्वज मान लिया जाये कि झूठी की अपनी सिफारिश डिफ़ॉल्ट पर छोड़ दिया जाता है, इस लेन-देन का कार्य प्रगति पर बनी हुई है जब तक सत्र, वापस लुढ़का प्रतिबद्ध है, या बंद कर दिया है। सत्र का उपयोग फिर से किया जाएगा, पिछले लेनदेन के अंत में; से यह इस प्रकार है कि सत्र कई लेनदेन में जीवनकाल रखने में सक्षम है, हालांकि एक समय में केवल एक ही है। हम लेनदेन के दायरे और सत्र के दायरे के रूप में इन दो अवधारणाओं का उल्लेख करते हैं।
निहितार्थ है कि यहाँ SQLAlchemy ORM डेवलपर बढ़ावा दे रही है इन दो स्कोप, सहित न केवल जब स्कोप शुरू और समाप्त अपने या अपने आवेदन में स्थापित करने के लिए है, लेकिन है भी विस्तार उन स्कोप के , उदाहरण के लिए किसी एकल सत्र उदाहरण को स्थानीय को फ़ंक्शन या विधि के भीतर निष्पादन प्रवाह में होना चाहिए, क्या यह संपूर्ण एप्लिकेशन द्वारा उपयोग की जाने वाली वैश्विक वस्तु होनी चाहिए, या कहीं इन के बीच में होना चाहिए।
इस क्षेत्र को निर्धारित करने के लिए डेवलपर पर लगाए गए बोझ एक क्षेत्र है जहां SQLAlchemy ORM के बारे में एक मजबूत राय है कि डेटाबेस का उपयोग कैसे किया जाना चाहिए। कार्य पैटर्न की इकाई विशेष रूप से समय के साथ परिवर्तन जमा करने और उन्हें समय-समय पर फ्लश करने में से एक है, स्थानीय लेन-देन में मौजूद होने के साथ-साथ सिंक में इन-मेमोरी स्थिति को ध्यान में रखते हुए।यह पैटर्न केवल तब प्रभावी होता है जब सार्थक लेन-देन के क्षेत्र मौजूद होते हैं।
सबसे पहले आप कम कर सकते हैं आपका सत्र कितनी देर खुला रहता है,:
जिसके अनुसार, आपको कुछ बातों का आप कैसे काम करता है स्थिति को बदलने के लिए कर सकते हैं। सत्र बी ऑब्जेक्ट से पूछताछ कर रहा है, फिर बाद में आप उस ऑब्जेक्ट (उसी सत्र में) के साथ कुछ कर रहे हैं जिसे आप गुणों को अद्यतित करना चाहते हैं। एक समाधान यह दूसरा ऑपरेशन एक अलग सत्र में किया जाना है।
एक और
# immediately re-load attributes on obj1, obj2
session.refresh(obj1)
session.refresh(obj2)
# expire objects obj1, obj2, attributes will be reloaded
# on the next access:
session.expire(obj1)
session.expire(obj2)
आप session.refresh()
उपयोग कर सकते हैं तुरंत वस्तु का एक अप-टू-डेट संस्करण प्राप्त करने, यहां तक कि पहले से ही सत्र है, समय सीमा समाप्त/रीफ्रेश विधियों का उपयोग करने docs show के रूप में है ... पहले वस्तु पूछताछ की।
http://stackoverflow.com/a/18684124/1309352 –
यह रूप में अच्छी तरह मदद कर सकते हैं : http://stackoverflow.com/a/25694346/134904 – kolypto