मैंने अभी स्क्लेक्लेमी का उपयोग शुरू किया और एक डिटेक्टेड इंस्टेंस एरर प्राप्त किया और कहीं भी इस पर अधिक जानकारी नहीं मिल पाई। मैं एक सत्र के बाहर उदाहरण का उपयोग कर रहा हूं, इसलिए यह स्वाभाविक है कि SQLAlchemy किसी भी रिश्ते को लोड करने में असमर्थ है अगर वे पहले से लोड नहीं हैं, हालांकि, जो विशेषता मैं एक्सेस कर रहा हूं वह संबंध नहीं है, वास्तव में इस ऑब्जेक्ट का कोई संबंध नहीं है। मुझे उत्सुक लोडिंग जैसे समाधान मिलते हैं, लेकिन मैं इस पर लागू नहीं हो सकता क्योंकि यह कोई संबंध नहीं है। मैंने सत्र बंद करने से पहले इस विशेषता को "स्पर्श" करने का भी प्रयास किया, लेकिन यह अभी भी अपवाद को रोकता नहीं है। गैर-रिलेशनल प्रॉपर्टी के लिए इस अपवाद को एक बार पहले सफलतापूर्वक एक्सेस करने के बाद क्या हो सकता है? इस मुद्दे को डीबग करने में कोई मदद की सराहना की जाती है। मैं इस बीच एक पुन: उत्पन्न स्टैंड-अलोन परिदृश्य पाने और यहां अपडेट करने का प्रयास करूंगा।नियमित विशेषता के साथ SQLAlchemy DetachedInstance त्रुटि (संबंध नहीं)
अद्यतन:
File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/attributes.py", line 159, in __get__
return self.impl.get(instance_state(instance), instance_dict(instance))
File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/attributes.py", line 377, in get
value = callable_(passive=passive)
File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/state.py", line 280, in __call__
self.manager.deferred_scalar_loader(self, toload)
File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/mapper.py", line 2323, in _load_scalar_attributes
(state_str(state)))
DetachedInstanceError: Instance <ReportingJob at 0xa41cd8c> is not bound to a Session; attribute refresh operation cannot proceed
आंशिक मॉडल इस तरह दिखता है:
metadata = MetaData()
ModelBase = declarative_base(metadata=metadata)
class ReportingJob(ModelBase):
__tablename__ = 'reporting_job'
job_id = Column(BigInteger, Sequence('job_id_sequence'), primary_key=True)
client_id = Column(BigInteger, nullable=True)
और क्षेत्र client_id क्या एक साथ इस अपवाद उत्पन्न कर रहा है है यह कुछ के ढेर के साथ वास्तविक अपवाद संदेश है नीचे की तरह उपयोग:
क्वेरी:
jobs = session \
.query(ReportingJob) \
.filter(ReportingJob.job_id == job_id) \
.all()
if jobs:
# FIXME(Hari): Workaround for the attribute getting lazy-loaded.
jobs[0].client_id
return jobs[0]
यह वही सत्र दायरे से बाहर बाद में अपवाद से चलाता है:
msg = msg + ", client_id: %s" % job.client_id
यह मदद कर सकता है: http://stackoverflow.com/a/25694346/134904 – kolypto