मेरे वर्तमान मॉडल उपयोगकर्ता में, मेरे पास एक फ़ील्ड "नाम" है जो शून्य नहीं हो सकता है।स्क्लेक्लेमी के लेन-देन में त्रुटियां उचित ट्रेसबैक नहीं लौटती हैं (पायथन 2.7)
मैं उपयोगकर्ता ऑब्जेक्ट बनाने का प्रयास करता हूं, और इसे पिरामिड द्वारा प्रदान किए गए डीबीएसशन में जोड़ता हूं और इसे लेनदेन के साथ प्रस्तुत करता हूं।
with transaction.manager:
u = models.User()
models.DBSession.add(u)
जो लोग पिरामिड का प्रयोग नहीं करते के लिए, DBSession है:
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
अब, मेरी लेनदेन में ऊपर, मैं एक मान्यता मुद्दा है - मैं उपयोगकर्ता को नाम निर्दिष्ट करने की जरूरत है, लेकिन मैंने नहीं किया हालांकि, बजाय मुझे बता एक त्रुटि होने का "आप अपने उपयोगकर्ता नाम निर्दिष्ट कर जरूरत है!", मैं इस मिल:
<ipython-input-5-47d9c0e393f7> in <module>()
2 u = models.User()
----> 3 models.DBSession.add(u)
4
/home/user/Projects/env/local/lib/python2.7/site-packages/transaction-1.4.1-py2.7.egg/transaction/_manager.pyc in __exit__(self, t, v, tb)
118 def __exit__(self, t, v, tb):
119 if v is None:
--> 120 self.commit()
121 else:
122 self.abort()
/home/user/Projects/env/local/lib/python2.7/site-packages/transaction-1.4.1-py2.7.egg/transaction/_manager.pyc in commit(self)
109 """ See ITransactionManager.
110 """
--> 111 return self.get().commit()
112
113 def abort(self):
/home/user/Projects/env/local/lib/python2.7/site-packages/transaction-1.4.1-py2.7.egg/transaction/_transaction.py in commit(self)
276 tb = None
277 try:
--> 278 t, v, tb = self._saveAndGetCommitishError()
279 self._callAfterCommitHooks(status=False)
280 reraise(t, v, tb)
/home/user/Projects/env/local/lib/python2.7/site-packages/transaction-1.4.1-py2.7.egg/transaction/_transaction.py in _saveAndGetCommitishError(self)
300 import pdb
301 pdb.set_trace()
--> 302 traceback.print_stack(sys._getframe(1), None, ft)
303 # Append the stack entries from here down to the exception.
304 traceback.print_tb(tb, None, ft)
/usr/lib/python2.7/traceback.py in print_stack(f, limit, file)
267 except ZeroDivisionError:
268 f = sys.exc_info()[2].tb_frame.f_back
--> 269 print_list(extract_stack(f, limit), file)
270
271 def format_stack(f=None, limit=None):
/usr/lib/python2.7/traceback.py in print_list(extracted_list, file)
23 ' File "%s", line %d, in %s' % (filename,lineno,name))
24 if line:
---> 25 _print(file, ' %s' % line.strip())
26
27 def format_list(extracted_list):
/usr/lib/python2.7/traceback.py in _print(file, str, terminator)
11
12 def _print(file, str='', terminator='\n'):
---> 13 file.write(str+terminator)
14
15
TypeError: 'unicode' does not have the buffer interface
मैं हाथ में समस्या मिली है कहीं न कहीं, वहाँ एक अजगर संस्करण 2 है वह यह है कि बनाम 3 असंगतता, यहां दिखाया गया TypeError: 'str' does not support the buffer interface। मुझे पता है कि स्क्लाक्लेमी पायथन 3+ का समर्थन करता है, और यही वह जगह है जहां से समस्या आ रही है।
ध्यान दें कि यदि मैं अपना लेनदेन सही तरीके से करता हूं, तो कोई त्रुटि नहीं फेंक दी जाती है।
क्या इस मुद्दे को traceback.py में कोड ओवरराइट किए बिना प्राप्त करने का कोई तरीका है?
क्या आप त्रुटि को पुन: उत्पन्न करने के लिए पूर्ण कोड प्रदान कर सकते हैं? – javex
मुझे यकीन नहीं है कि आपको और क्या देखना है। उपयोगकर्ता मॉडल में केवल कुछ SQLAlchemy कॉलम हैं, और ऐसा लगता है कि त्रुटियों को सही तरीके से संभालने में असमर्थता से असंबंधित है (यह उन सभी मॉडलों के लिए हुआ जो मैंने कोशिश की थी, लेकिन केवल कुछ कॉलम के लिए अमान्य प्रविष्टियों के साथ प्रतिबद्ध करने की कोशिश करते समय) – limasxgoesto0
क्या आप एक नए वर्चुअलएव में त्रुटि को पुन: उत्पन्न करने के लिए न्यूनतम कोड और आवश्यकता फ़ाइल प्रदान कर सकते हैं? –