Django documentation утверждает, что:select_for_update в разработке Django
Если вы полагались на «автоматических операций», чтобы обеспечить блокировку между select_for_update() и последующей операции записи - в чрезвычайно хрупкой конструкции, но тем не менее, возможно, - вы должны обернуть соответствующий код в atomic().
Причина, по которой это больше не работает, заключается в том, что autocommit выполняется на уровне базы данных, а не на уровне приложения? Ранее сделка would be held open until a data-altering function is called:
поведение Джанго по умолчанию для работы с открытой сделкой, которую он берет на себя обязательство автоматически, когда любые встроенными данные изменяющая модель функции называется
А с Django 1.6, с автокоммиттом на уровне базы данных, что select_for_update
, за которым следует, например, write
, фактически будет работать в двух транзакциях? Если это так, то не select_for_update
стал бесполезным, поскольку его точка была lock the rows until a data altering function was called?
Autocommit на уровне базы данных пришел с django 1.6, а не 1.5. – fabspro
@fabspro thanks - исправлено – Taras