सत्र इस तरह काम करने के लिए डिज़ाइन किए गए हैं . सत्र बी में वस्तु के गुण वही रहेंगे जो सत्र बी में पहली बार पूछे जाने पर थे। इसके अतिरिक्त, SQLAlchemy अन्य सत्रों में वस्तुओं को स्वचालित रूप से रीफ्रेश करने का प्रयास नहीं करेगा, और न ही मुझे लगता है कि कुछ बनाने की कोशिश करना बुद्धिमान होगा इस तरह।
आपको डेटाबेस में एकल लेनदेन के रूप में प्रत्येक सत्र के जीवनकाल के बारे में सक्रिय रूप से सोचना चाहिए। कैसे और कब सत्रों को इस तथ्य से निपटने की आवश्यकता है कि उनकी वस्तुएं बासी हो सकती हैं, एक तकनीकी समस्या नहीं है जिसे SQLAlchemy (या SQLAlchemy के लिए कोई एक्सटेंशन) में निर्मित एल्गोरिदम द्वारा हल किया जा सकता है:यह एक "व्यापार" समस्या है जिसका समाधान आपको अवश्य करना चाहिए अपने आप को निर्धारित और कोड करें। "सही" प्रतिक्रिया यह कह सकती है कि यह कोई समस्या नहीं है:सत्र बी के साथ होने वाला तर्क मान्य हो सकता है यदि सत्र बी शुरू होने पर डेटा का उपयोग करता है। आपकी "समस्या" वास्तव में कोई समस्या नहीं हो सकती है। डॉक्स में वास्तव में एक सत्रों का उपयोग कब करें, इस पर पूरा अनुभाग , लेकिन यदि आप एक आकार-फिट-सभी समाधान की उम्मीद कर रहे हैं तो यह एक बहुत ही गंभीर प्रतिक्रिया देता है...
उस ने कहा, स्थिति के काम करने के तरीके को बदलने के लिए आप कुछ चीजें कर सकते हैं:
सबसे पहले, आप कम कर सकते हैं कि आपका सत्र कितने समय तक खुला रहता है। सत्र बी ऑब्जेक्ट से पूछताछ कर रहा है, फिर बाद में आप उस ऑब्जेक्ट के साथ कुछ कर रहे हैं (उसी सत्र में) कि आप विशेषताओं को अद्यतित रखना चाहते हैं। एक समाधान यह है कि यह दूसरा ऑपरेशन एक अलग सत्र में किया जाए।
दूसरा है एक्सपायर/रीफ्रेश विधियों का उपयोग करना, जैसे दस्तावेज़ दिखाएँ ...
# 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()
. का उपयोग कर सकते हैं ऑब्जेक्ट का अप-टू-डेट संस्करण तुरंत प्राप्त करने के लिए, भले ही सत्र ने ऑब्जेक्ट को पहले ही क्वेरी कर लिया हो।