-
Notifications
You must be signed in to change notification settings - Fork 0
TECH TALK 7 BAZY DANYCH TRANSAKCJE BLOKADY
Autocommit – domyślne zachowanie django. Każde zapytanie jest automatycznie commitowane do bazy danych
Transakcje – lista operacji na bazie danych, które mogą zostać zatwierdzone (wykonane) jedynie wszystkie lub żadna
Typowy sposób rozwiązywania konfliktów w django to zamykanie każdego widoku w transakcje. W tym celu należy ustawić ATOMIC_REQUESTS na True. Sposób działania transakcji:
-
Widok/blok został wykonany bez błędów- django zatwierdza (commituje) transakcję i wszystkie zawarte
-
Widok/blok podczas wykonywania rzucił exception- django anuluje transakcję i *cofa wszystkie zmiany wprowadzane do bazy danych (rollback). Uwaga na łapanie wyjątków w transakcjach
Transakcję można rozpocząć na 2 sposoby:
Transakcja jako dekorator:
from django.db import transaction
@transaction.atomic
def viewfunc(request):
# This code executes inside a transaction.
do_stuff()
Transakcja jako context manager:
from django.db import transaction
def viewfunc(request):
# This code executes in autocommit mode (Django's default).
do_stuff()
**with transaction.atomic():**
# This code executes inside a transaction.
do_more_stuff()
- Savepoint to marker miejsca w kodzie oznaczający miejsce, do którego w przypadku błędów wykonywany jest rollback. Można dzięki temu określić punkt, „mówiąc – do tego miejsca wszystko jest ok”. Rollback wykonywany jest tylko do tego miejsca, zamiast całej transakcji
- Są obsługiwane przez SQLite, PostgreSQL, Oracle, and MySQL
- Używane tylko w porzypadku transakcji, w domyślnym trybie autocommit nie mają sensu
- Użycie zagnieżdżonego bloku atomowego powoduje stworzenie savepointu na jego początku.
- Wg dokumentacji django, lepiej korzystać z savepointów poprzez korzystanie z bloków atomowych niż tworzenie ich bezpośrednio w kodzie