Я хочу сделать атомную транзакцию, а моя база данных - PostgreSQL.Django db transaction set_autocommit и CONN_MAX_AGE
Вот как я делал операцию до сих пор:
transaction.set_autocommit(False)
try:
do_stuff()
transaction.commit()
except:
transaction.rollback()
raise
finally:
transaction.set_autocommit(True)
Док говорит, что я мог бы сделать это следующим образом:
with transaction.atomic():
do_stuff()
ли как код то же самое?
У меня есть пул связи CONN_MAX_AGE=60
в моем settings.py
.
Что происходит со следующим сценарием:
- первый запрос устанавливает AutoCommit в
False
- второй запрос делает DB обновления
- первый запрос поднимает и исключения, откаты и наборы Autocommit обратно
True
Могут ли мои обновления в 2. выжить?
Будет ли отличаться от transaction.atomic()
?
Важным отличием является то, что удаленный внутренний атомный блок может быть отброшен внешним атомным блоком (например, если вы установили ATOMIC_REQUESTS в значение True). – benselme