1

就目前而言,我有一个反序列化器,它可以导入我扔给它的任何模型并将其放入我的数据库中。不幸的是,它使用每个模型都会访问数据库,我想阻止它。

有什么办法可以让我把很多短的保存归为一个大的吗?

示例代码:

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

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

4

1 回答 1

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(),但请注意文档中列出的警告。

于 2012-06-20T16:35:48.537 回答