Các Django documentation khẳng định rằng:select_for_update trong phát triển Django
Nếu bạn dựa trên “các giao dịch tự động” để cung cấp khóa giữa select_for_update() và một hoạt động viết tiếp theo - một thiết kế cực kỳ mỏng manh, nhưng dù sao có thể - bạn phải quấn mã có liên quan trong atomic().
Lý do tại sao điều này không còn hoạt động nữa là tự động được thực hiện ở lớp cơ sở dữ liệu chứ không phải lớp ứng dụng? Trước giao dịch would be held open until a data-altering function is called:
hành vi mặc định của Django là để chạy với một giao dịch mở mà nó cam kết tự động khi bất kỳ built-in, mô hình dữ liệu làm thay đổi hàm được gọi
Và kể từ Django 1.6, với autcommit tại lớp cơ sở dữ liệu, rằng một select_for_update
theo sau là ví dụ một write
thực sự sẽ chạy trong hai giao dịch? Nếu trường hợp này xảy ra, thì không phải select_for_update
trở thành vô dụng vì điểm của nó là lock the rows until a data altering function was called?
Tự động chuyển đổi ở lớp cơ sở dữ liệu đi kèm với django 1.6, không phải 1.5. – fabspro
@fabspro cảm ơn - sửa chữa – Taras