私の現在のモデルのUserでは、 "name"フィールドはnullにはできません。SQLAlchemyのトランザクションのエラーが適切なトレースバックを返さない(Python 2.7)
私はユーザオブジェクトを作成し、それをPyramidが提供するDBSessionに追加し、それをトランザクションとして送信してみます。ピラミッドを使用していない人のために
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
はどこか、Pythonのバージョン2があります、ということですここではTypeError: 'str' does not support the buffer interfaceと表示されています。私はSQLAlchemyがPython 3+をサポートしていることを知っているので、そこから問題が発生している可能性があります。
私のトランザクションを正しく行うと、エラーはスローされません。
traceback.pyのコードを上書きすることなくこの問題を回避する方法はありますか?
エラーを再現するための完全なコードを提供していただけますか? – javex
他に何が必要なのか分かりません。 UserモデルにはいくつかのSQLAlchemyカラムがありますが、エラーを正しく処理できないこととは関係ありません(これは、これを試したすべてのモデルで起こりましたが、特定のカラムに対して無効なエントリをコミットしようとしている場合のみ) – limasxgoesto0
新しいvirtualenvでエラーを再現するための最小限のコードと要件ファイルを提供できますか? –