2016-03-04 4 views
1

Предположим, что я бегу обновление нескольких модельных объектов в Джанго:Нужно ли обертывать обновление django в транзакции?

SomeModel.objects.filter(name="abc").update(name="xyz") 

мне нужно обернуть это в transaction.atomic делать? Есть ли что-то плохое, что произойдет, если я этого не сделаю?

ответ

0

Модель транзакции Django по умолчанию предназначена для автоматической привязки к db. Это означает, что если есть исключения после того, как некоторые изменения были совершены, но до того, как все изменения будут совершены, вы можете столкнуться с проблемами или нет. Это зависит от того, что именно вы пытаетесь сделать. Это потенциальная проблема, основанная на вашем собственном коде? Есть ли риск возникновения ошибки, и если да, было бы проблемой, что некоторые объекты были бы обновлены, но не другие?

Если это так, вы можете предотвратить это, используя @ transaction.atomic decorator (для функции) или путем упаковки определенного фрагмента кода с помощью with transaction.atomic():. Это приведет к откату изменений в db в случае ошибки. Просто быть ультрабезопасным, я думаю, вы всегда можете использовать атомные транзакции, но вам нужно?

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