Django数据库查询往返

时间:2013-08-22 11:35:55

标签: python django django-models

我有下面的查询,你可以在我的循环中看到我添加每条消息。我想减少我必须对DB进行的总往返次数。这是一种我可以一次处理20个批量创建消息的方式吗?这对速度有帮助吗?欢迎任何建议。

class ProcessRequests(Task):
    """
    Celery Task to start request to process that are not scheduled.
    """
    name = "Request to Process"
    max_retries = 1
    default_retry_delay = 3

    def run(self, batch):
        # Only run this task on non-scheduled tasks
        if batch.status != "Scheduled":
            q = Contact.objects.filter(contact_owner=batch.user, subscribed=True)
            if batch.group == None:
                q = q.filter(id=batch.contact_id)
            else:
                q = q.filter(group=batch.group)

            for e in q:
                msg = Message.objects.create(
                    recipient_number=e.mobile,
                    content=batch.content,
                    sender=e.contact_owner,
                    billee=batch.user,
                    sender_name=batch.sender_name
                )
                gateway = Gateway.objects.get(pk=2)
                msg.send(gateway)

1 个答案:

答案 0 :(得分:2)

您可以使用bulk_create

另请注意,每次循环时都会获得相同的gateway对象,最好在循环外部获取一次,并且每次使用相同的对象。