Django

Django ORM avançado

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

28 perguntas de entrevista·
Senior
1

Qual é a principal diferença entre Model.objects.raw() e connection.cursor() para executar raw SQL no Django?

Resposta

Model.objects.raw() retorna instâncias de modelo mapeadas automaticamente, preservando os benefícios do ORM como acesso a atributos e relações. connection.cursor() retorna um cursor de banco de dados bruto com tuplas, oferecendo mais flexibilidade para consultas não vinculadas a um modelo específico, mas exigindo tratamento manual dos resultados.

2

Qual é a principal vantagem de criar um custom Manager no Django em vez de adicionar métodos diretamente ao modelo?

Resposta

Um custom Manager encapsula a lógica de consultas em nível de tabela, permitindo encadear métodos com o QuerySet e reutilizar essa lógica em qualquer lugar onde o modelo é usado. Os métodos de modelo operam sobre instâncias individuais. O Manager também permite modificar o QuerySet padrão com get_queryset().

3

Como implementar um custom QuerySet para permitir o encadeamento de métodos personalizados no Django?

Resposta

Para permitir o encadeamento, é preciso criar uma classe que herde de QuerySet com métodos que retornem self ou um QuerySet filtrado. Em seguida, usar o custom QuerySet via Manager.from_queryset() ou definir um Manager personalizado com get_queryset() retornando o custom QuerySet. Isso permite chamar Model.objects.custom_method().filter().

4

Qual expressão do Django usar para incrementar atomicamente um contador no banco de dados sem risco de race condition?

5

Qual é a função de transaction.atomic() e como ele lida com exceções no Django?

+25 perguntas de entrevista

Domine Django para sua proxima entrevista

Acesse todas as perguntas, flashcards, testes tecnicos, exercicios de code review e simuladores de entrevista.

Comece gratis