Django

Fortgeschrittenes Django ORM

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

28 Interview-Fragen·
Senior
1

Was ist der Hauptunterschied zwischen Model.objects.raw() und connection.cursor() beim Ausführen von raw SQL in Django?

Antwort

Model.objects.raw() gibt automatisch zugeordnete Modellinstanzen zurück und bewahrt ORM-Vorteile wie Attributzugriff und Relationen. connection.cursor() gibt einen rohen Datenbank-Cursor mit Tupeln zurück und bietet mehr Flexibilität für Abfragen, die nicht an ein bestimmtes Modell gebunden sind, erfordert jedoch eine manuelle Ergebnisverarbeitung.

2

Was ist der Hauptvorteil, einen custom Manager in Django zu erstellen, anstatt Methoden direkt zum Modell hinzuzufügen?

Antwort

Ein custom Manager kapselt die Abfragelogik auf Tabellenebene, ermöglicht Methodenverkettung mit QuerySets und die Wiederverwendung dieser Logik überall dort, wo das Modell verwendet wird. Modellmethoden operieren auf einzelnen Instanzen. Der Manager erlaubt es auch, das Standard-QuerySet mit get_queryset() zu ändern.

3

Wie implementiert man ein custom QuerySet, um die Verkettung benutzerdefinierter Methoden in Django zu ermöglichen?

Antwort

Um Verkettung zu ermöglichen, erstellt man eine von QuerySet erbende Klasse mit Methoden, die self oder ein gefiltertes QuerySet zurückgeben. Dann verwendet man das custom QuerySet über Manager.from_queryset() oder definiert einen custom Manager mit get_queryset(), das das custom QuerySet zurückgibt. Dies ermöglicht den Aufruf von Model.objects.custom_method().filter().

4

Welcher Django-Ausdruck wird verwendet, um einen Zähler in der Datenbank atomar ohne Race-Condition-Risiko zu inkrementieren?

5

Was ist die Funktion von transaction.atomic() und wie behandelt es Ausnahmen in Django?

+25 Interview-Fragen

Meistere Django für dein nächstes Interview

Zugang zu allen Fragen, Flashcards, technischen Tests, Code-Review-Übungen und Interview-Simulatoren.

Kostenlos starten