2009-09-20 36 views
10

Tôi có một dự án django, trong đó các giá trị cơ sở dữ liệu cần được cập nhật khá thường xuyên. Có một cronjob chạy để cập nhật các giá trị này trong cơ sở dữ liệu, nhưng một số hoạt động yêu cầu các giao dịch nguyên tử. Có ai biết làm thế nào để làm cho một phương pháp mô hình là một giao dịch hoàn chỉnh trong django mà không đi qua quan điểm? Lý tưởng nhất, tôi muốn để có thể bắt đầu một giao dịch ở đầu của một phương pháp và cam kết nó ở cuối, và sau đó chỉ có thể gọi phương thức đó từ bất cứ nơi nào (một cái nhìn hoặc một cronjob) với đảm bảo rằng phương pháp này là nguyên tử. Nếu bạn biết làm thế nào để làm điều này, tôi cũng cần phải biết có hay không, cam kết sẽ thất bại (do viết đồng thời hoặc một cái gì đó), giao dịch được tự động tái cố gắng, hoặc nếu tôi sẽ phải tự bắt ngoại lệ lỗi và gọi lại phương thức.Quản lý giao dịch Django

Cảm ơn bạn.

Trả lời

15

Bạn có một cái nhìn tại của Django transaction docs? Đặc biệt là trang trí @transaction.commit_on_success (source code). Nó cam kết giao dịch nếu chức năng được trang trí trả về mà không làm tăng ngoại lệ. Nếu một ngoại lệ xảy ra, nó sẽ quay trở lại.

+5

Có điều này là điều thích hợp để sử dụng. Tôi nghĩ rằng OP là có liên quan bởi vì tài liệu chỉ đề cập đến những kết hợp với quan điểm, không phải phương pháp mô hình, nhưng nhìn vào nguồn không có gì trong đó sẽ không làm việc bên ngoài một cái nhìn. –

+5

Thực sự có một lưu ý trên trang đó của tài liệu có nội dung "Mặc dù các ví dụ bên dưới sử dụng chức năng xem làm ví dụ, các trình trang trí này cũng có thể được áp dụng cho các chức năng không xem." –

+0

Cảm ơn. Bạn có xảy ra bất kỳ ý tưởng gì sẽ xảy ra nếu đồng thời viết được cố gắng? Giao dịch có thực hiện lại hay không, và nếu không, nó sẽ làm gì? Cảm ơn! – So8res

Các vấn đề liên quan