2011-08-19 74 views
0

正在尝试执行事务性任务,由此如果任务未能发送电子邮件,任务将回滚数据库更新。django djcelery:构建事务性任务不会回滚

下面是我的代码,任何人都可以在这里建议做错了什么?

from celery.task import task 
from django.core.mail import send_mail, send_mass_mail 
from django.db import transaction 


@task(name='communicator.process_emails') 
@transaction.commit_manually 
def process_emails(): 
    from models import Comm_Queue 
    try: 
     message = [] 
     for i in Comm_Queue.objects.filter(status='P').order_by('sender_email'): 
      message.append((i.subject, i.content, i.sender_email, [i.recipient_email])) 
      Comm_Queue.objects.filter(id=i.id).update(status='S') 
     if send_mass_mail(message): 
      transaction.commit() 
    except Exception, e: 
     print 'rolled back (exception): %s' % e.__str__() 
     transaction.rollback() 
+0

发生了什么事,和你有什么期待?有关您正在使用的数据库引擎的信息也会有所帮助。上午 – SteveMc

+0

上午期望交易在异常情况下回滚。但它不像数据库引擎使用它的MySQL –

回答

1

由于您使用的是MySQL,因此首先需要检查您正在使用的数据库引擎是否首先支持事务,以及事务是否已在MySQL配置中启用。

查看的MySQL/Django的交易问题,此链接了解更多信息:https://docs.djangoproject.com/en/dev/ref/databases/#storage-engines

+0

几乎关于Django和数据库的所有问题都可以用“不要使用MyISAM :-)”来回答“ – SteveMc