AttributeError: module 'django.db.transaction' has no attribute 'commit_manually'


djnago で transaction の 管理 を手動で行う方法を調べたところ、
データベーストランザクションの管理 — Django 1.4 documentation に、
@transaction.commit_manually というデコレータがあったので、
こちらを付与したところ、以下のエラーが発生しました。

AttributeError: module 'django.db.transaction' has no attribute 'commit_manually'

使用しているDjango Version

使用Version は 1.10 です。

pip list
----------------------------
Django (1.10)
----------------------------

原因

以下のドキュメントに記載がありますが、
Django Deprecation Timeline — Django 1.6a1 documentation
@transaction.commit_manually は、 Django 1.8 で削除されたようです。

対応方法(というかDjango 1.8 以降での記述方法)

StackOverFlow に 以下の記事がありました。
python - Upgrading transaction.commit_manually() to Django > 1.6 - Stack Overflow

with 句に、transaction.atomic() を書いて、
transaction 管理したい処理をnestさせて書けば、良いようです。

with transaction.atomic():
    do_something()

以上です。

コメント