Mam projekt django, w którym wartości bazy danych trzeba dość często aktualizować na własną rękę. Istnieje cronjob, który uruchamia aktualizację tych wartości w bazie danych, ale niektóre operacje wymagają transakcji atomowych. Czy ktokolwiek wie, jak uczynić metodę modelową pełną transakcją w django bez przechodzenia przez widoki?Zarządzanie transakcjami Django
Idealnie, chciałbym móc rozpocząć transakcję na początku metody i zatwierdzić ją na końcu, a następnie po prostu móc wywołać tę metodę z dowolnego miejsca (widok lub cronjob) z zagwarantować, że metoda jest atomowa.
Jeśli wiesz, jak to zrobić, muszę również wiedzieć, czy w przypadku niepowodzenia zatwierdzenia (z powodu równoczesnego zapisu lub czegoś podobnego), transakcja zostanie automatycznie ponownie podjęta lub jeśli będę musiał ręcznie wychwycić wyjątek awarii i ponownie wywołać metodę.
Dziękuję.
Tak, jest to odpowiednie rozwiązanie. Myślę, że PO był zaniepokojony, ponieważ dokumentacja odnosi się tylko do nich w połączeniu z widokami, a nie metodami modelowymi, ale patrząc na źródło, nie ma tam niczego, co nie działałoby poza poglądem. –
Na tej stronie dokumentacji jest napisane: "Chociaż poniższe przykłady wykorzystują funkcje widoku jako przykłady, te dekoratory można również zastosować do funkcji innych niż widok". –
Dzięki. Czy zdajesz sobie sprawę, co się stanie, jeśli spróbujesz zapisu symultanicznego? Czy transakcja ponownie podejmuje próbę, a jeśli nie, to co ona rzuca? Dzięki! – So8res