【发布时间】:2012-04-14 20:49:05
【问题描述】:
我有一个需要手动管理事务的视图函数,但是当我应用 @transaction.commit_manually 装饰器时,django 总是会引发以下异常。
从下面的代码跟踪中可以看出,事务在从视图返回之前就已提交。
我在 windows 和 linux 上都使用 sqlite 和 django 1.4。
下面是django_trace的输出,后面是异常。需要明确的是:无论我是否使用 django_trace,都会发生这种情况,并且当没有装饰器时,不会引发任何异常。这不是由“吞下”异常引起的。
请注意,下面的第 60 行在上下文处理器内,因此在 commit_manually-wrapped 视图之外。
01->mainapp.views:1321: transaction.commit()
01->mainapp.views:1322: return render_to_response('mainapp/templates/incorporate.html',
01->mainapp.views:1323: RequestContext(request, form_params))
02-->mainapp.views:60: transaction.rollback_unless_managed()
02-->mainapp.views:61: return {'home_login_form': AuthenticationForm(request)}
Traceback (most recent call last):
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\contrib\staticfiles\handlers.py", line 67, in __call__
return self.application(environ, start_response)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\contrib\staticfiles\handlers.py", line 67, in __call__
return self.application(environ, start_response)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\wsgi.py", line 241, in __call__
response = self.get_response(request)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 179, in get_response
response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 221, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\handlers\base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Marcin\Documents\oneclickcos\oneclickcos\mainapp\decorators.py", line 26, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 209, in inner
return func(*args, **kwargs)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 203, in __exit__
self.exiting(exc_value, self.using)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 288, in exiting
leave_transaction_management(using=using)
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\transaction.py", line 52, in leave_transaction_management
connection.leave_transaction_management()
File "C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\db\backends\__init__.py", line 119, in leave_transaction_management
raise TransactionManagementError("Transaction managed block ended with "
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK
为了清楚起见,我已经检查了有关此主题的其他问题,但他们没有解决我的问题。
【问题讨论】:
标签: python django sqlite django-orm