1

現状では、私が投げたモデルをインポートしてデータベースに入れることができるデシリアライザーがあります。残念ながら、それはすべてのモデルでデータベースにヒットするので、これを止めたいと思います。

たくさんの短いセーブを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 に答える