如何组合django queryset以允许我一次性保存?

时间:2012-06-20 16:30:11

标签: django django-models

按照目前的情况,我有一个deserialiser,它可以导入我抛出的任何模型并将其放入我的数据库中。不幸的是,每个模型都会打到数据库,我想停止这个。

我有什么方法可以将大量的短期存款集中到一个大的存档中吗?

示例代码:

def deserialise(xml):
    for x in model_list:
         do work to make instance...
         instance.save()
    return True

有没有办法将实例的保存移出for循环?

1 个答案:

答案 0 :(得分:4)

您可以使用transaction.commit_manually()

from django.db import transaction

@transaction.commit_manually
def deserialise(xml):
    for x in model_list:
         # do work to make instance...
         instance.save()
    transaction.commit()
    return True

transaction.commit_on_success(),当函数成功返回时,它将自动提交保存。

from django.db import transaction

@transaction.commit_on_success
def deserialise(xml):
    for x in model_list:
         # do work to make instance...
         instance.save()
    return True

或者,在django 1.4中还有bulk_create(),但请注意文档中列出的警告。