Skip to content

TECH TALK 7 BAZY DANYCH TRANSAKCJE BLOKADY

pawelkisielewicz edited this page Sep 21, 2018 · 14 revisions

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:

  1. Widok/blok został wykonany bez błędów- django zatwierdza (commituje) transakcję i wszystkie zawarte

  2. 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()

Savepoints

  • 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
Clone this wiki locally