2016-06-08 1 views
0

Если я хочу написать несколько операторов SQL в блоке транзакций и убедиться, что для этого блока соблюдены все свойства ACID, как мне это достичь?Как свойства ACID предоставляются в транзакции django?

Пример: Когда я использую transaction.atomic, он обеспечивает атомарность для этого блока кода, но обеспечивает ли он контроль и изоляцию параллелизма (уровень таблицы или уровня строки)?

настоящее время я использую PostgreSQL и я установить уровень изоляции к ISOLATION_LEVEL_SERIALIZABLE.

Это дает мне сериализованные транзакции для транзакции .atomic блок?

И если это не так, как это делается?

ответ

1

Django's transaction.atomic реализован с использованием транзакции базы данных, поэтому любые гарантии, предоставляемые базой данных для его транзакций, также будут предоставляться атомными блоками Django. Поэтому, чтобы ответить на ваш вопрос, да.

Одна из тонкостей заключается в том, что Django поддерживает вложенные атомные блоки с использованием точек сохранения, и существует разница между блоками транзакций и блоками сохранения точки, в частности, более позднее исключение в рамках одной и той же внешней транзакции приведет к успешно завершенной точке сохранения блок для откат.

+0

Извините, это потребовалось время, чтобы проверить это. transaction.atomic просто обещает, что либо все, либо ни один из запросов под его блоком не будут выполняться. Независимо от того, что я выбираю в качестве настроек db. – RA123

+0

@ RA123: Если у вас возникла проблема, я предлагаю вам задать конкретный вопрос об этом и получить помощь. Всевозможные вещи в программировании могут пойти не так и не дать вам получить ожидаемые результаты. Но вы задали очень общий вопрос, и ответ заключается в том, что Django реализует 'transaction.atomic', используя транзакции (и уровни изоляции) базовой базы данных. –