2016-08-10 4 views
0

Я хотел бы получить некоторое представление о том, как улучшить (если есть) мой код при реализации транзакционного запроса в Django.транзакция, основанная на django

Вот как я понимаю ATOMIC_REQUEST. Я читал о документации django. Я пользуюсь этой функцией:

from django.db import transaction 
import sys 
@transaction.atomic 
def save_progress(request): 
    try: 
     with atomic.transaction(): 
      qs = AllProgressModel() 
      qs.name = 'level up' 
      qs.level = 25 
      qs.description = 'Increased 2 level' 
      qs.save() 
    except: 
     print(sys.exc_info()) 

-Я делаю это правильно?
-Программа будет сохранена или нет, если во время сохранения произойдет потеря соединения?
Спасибо заранее!

ответ

1

Вы не нуждаетесь ни в декораторе @transaction.atomic, ни в with atomic.transaction(), как правило, достаточно.

При использовании with atomic.transaction() уловить IntegrityError исключения вместо широкого использования всех исключений сразу.

Edit: Если вы обработка исключений вне атомного блока (например, ниже), то это лучшая практика, чтобы иметь внешнее атомное обертку, а также для обработки откатов и других операций базы данных могут потребоваться при обращении исключения части ,

from django.db import IntegrityError, transaction 
def save_progress(request): 
    try: 
     # with atomic.transaction() -> produce error (typo) 
     with transaction.atomic(): 
      ... 
      qs.name = 'level up' 
      qs.level = 25 
      qs.description = 'Increased 2 level' 
      qs.save() 
    except IntegrityError: 
     # You are here if something goes within the transaction, after rollback 
     # HANDLE exception 
+0

Извините за поздний ответ. Использовать только один? но один из примеров по документации django использует два. –

+0

https://docs.djangoproject.com/en/1.10/topics/db/transactions/ на контрольных транзакциях явно часть –

+0

Извините за путаницу. При обработке исключений, подобных этому, вы правы, это лучше. Я отредактировал, чтобы уточнить, почему/когда вам нужен второй. –

Смежные вопросы