0

電子メールの送信に失敗した場合、タスクがデータベースの更新をロールバックするトランザクション タスクを実行しようとしています。

以下は私のコードですが、ここで何が間違っているのかアドバイスできますか?

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()
4

1 に答える 1

1

MySQL を使用しているため、最初に確認する必要があるのは、使用しているデータベース エンジンがそもそもトランザクションをサポートしているかどうか、および MySQL 構成でトランザクションが有効になっているかどうかです。

MySQL/Django トランザクションの問題の詳細については、次のリンクを参照してください: https://docs.djangoproject.com/en/dev/ref/databases/#storage-engines

于 2011-08-20T11:04:32.677 に答える