Django

Django ORM avanzado

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

28 preguntas de entrevista·
Senior
1

¿Cuál es la diferencia principal entre Model.objects.raw() y connection.cursor() para ejecutar raw SQL en Django?

Respuesta

Model.objects.raw() devuelve instancias de modelo mapeadas automáticamente, conservando los beneficios del ORM como el acceso a atributos y relaciones. connection.cursor() devuelve un cursor de base de datos en bruto con tuplas, ofreciendo más flexibilidad para consultas no ligadas a un modelo específico, pero requiriendo un manejo manual de los resultados.

2

¿Cuál es la ventaja principal de crear un custom Manager en Django en lugar de agregar métodos directamente al modelo?

Respuesta

Un custom Manager encapsula la lógica de consultas a nivel de tabla, permitiendo encadenar métodos con el QuerySet y reutilizar esta lógica en cualquier lugar donde se use el modelo. Los métodos de modelo operan sobre instancias individuales. El Manager también permite modificar el QuerySet por defecto con get_queryset().

3

¿Cómo implementar un custom QuerySet para permitir el encadenamiento de métodos personalizados en Django?

Respuesta

Para permitir el encadenamiento, hay que crear una clase que herede de QuerySet con métodos que devuelvan self o un QuerySet filtrado. Luego, usar el custom QuerySet mediante Manager.from_queryset() o definir un Manager personalizado con get_queryset() que devuelva el custom QuerySet. Esto permite llamar a Model.objects.custom_method().filter().

4

¿Qué expresión de Django usar para incrementar atómicamente un contador en la base de datos sin riesgo de race condition?

5

¿Cuál es la función de transaction.atomic() y cómo maneja las excepciones en Django?

+25 preguntas de entrevista

Domina Django para tu próxima entrevista

Accede a todas las preguntas, flashcards, tests técnicos, ejercicios de code review y simuladores de entrevista.

Empieza gratis