Django

Zaawansowany Django ORM

Raw SQL, custom managers, query expressions, database functions, atomic transactions, select_for_update, race conditions, database routers

28 pytań z rozmów·
Senior
1

Jaka jest główna różnica między Model.objects.raw() a connection.cursor() przy wykonywaniu raw SQL w Django?

Odpowiedź

Model.objects.raw() zwraca automatycznie zmapowane instancje modelu, zachowując zalety ORM, takie jak dostęp do atrybutów i relacje. connection.cursor() zwraca surowy kursor bazy danych z krotkami, oferując większą elastyczność dla zapytań niezwiązanych z konkretnym modelem, ale wymagając ręcznej obsługi wyników.

2

Jaka jest główna zaleta tworzenia custom Managera w Django zamiast dodawania metod bezpośrednio do modelu?

Odpowiedź

Custom Manager enkapsuluje logikę zapytań na poziomie tabeli, umożliwiając łańcuchowanie metod z QuerySetami i ponowne wykorzystanie tej logiki wszędzie, gdzie używany jest model. Metody modelu działają na pojedynczych instancjach. Manager pozwala także modyfikować domyślny QuerySet za pomocą get_queryset().

3

Jak zaimplementować custom QuerySet, aby umożliwić łańcuchowanie niestandardowych metod w Django?

Odpowiedź

Aby umożliwić łańcuchowanie, należy utworzyć klasę dziedziczącą po QuerySet z metodami zwracającymi self lub przefiltrowany QuerySet. Następnie użyć custom QuerySet poprzez Manager.from_queryset() lub zdefiniować niestandardowy Manager z get_queryset() zwracającym custom QuerySet. Pozwala to wywoływać Model.objects.custom_method().filter().

4

Którego wyrażenia Django użyć do atomowego inkrementowania licznika w bazie danych bez ryzyka race condition?

5

Jaka jest funkcja transaction.atomic() i jak obsługuje wyjątki w Django?

+25 pytań z rozmów

Opanuj Django na następną rozmowę

Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.

Zacznij za darmo