Django

Django ORM avanzato

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

28 domande da colloquio·
Senior
1

Qual è la differenza principale tra Model.objects.raw() e connection.cursor() per eseguire raw SQL in Django?

Risposta

Model.objects.raw() restituisce istanze di modello mappate automaticamente, preservando i vantaggi dell'ORM come l'accesso agli attributi e alle relazioni. connection.cursor() restituisce un cursore di database grezzo con tuple, offrendo maggiore flessibilità per query non legate a un modello specifico, ma richiedendo una gestione manuale dei risultati.

2

Qual è il vantaggio principale di creare un custom Manager in Django anziché aggiungere metodi direttamente al modello?

Risposta

Un custom Manager incapsula la logica delle query a livello di tabella, consentendo il concatenamento di metodi con i QuerySet e il riutilizzo di questa logica ovunque il modello sia usato. I metodi del modello operano su singole istanze. Il Manager consente anche di modificare il QuerySet predefinito con get_queryset().

3

Come implementare un custom QuerySet per consentire il concatenamento di metodi personalizzati in Django?

Risposta

Per consentire il concatenamento, bisogna creare una classe che eredita da QuerySet con metodi che restituiscono self o un QuerySet filtrato. Poi usare il custom QuerySet tramite Manager.from_queryset() o definire un Manager personalizzato con get_queryset() che restituisce il custom QuerySet. Ciò consente di chiamare Model.objects.custom_method().filter().

4

Quale espressione Django usare per incrementare atomicamente un contatore nel database senza rischio di race condition?

5

Qual è la funzione di transaction.atomic() e come gestisce le eccezioni in Django?

+25 domande da colloquio

Padroneggia Django per il tuo prossimo colloquio

Accedi a tutte le domande, flashcards, test tecnici, esercizi di code review e simulatori di colloquio.

Inizia gratis