Relational Mapping - Visa aproveitar ao máximo o conceito de Orientação a Objetos, o Mapeamento Objeto-Relacional (ORM) é um framework que tem por objetivo minimizar as diferenças entre o paradigma orientado a objetos e o modelo entidade-relacional, criando uma ponte (mapeamento) entre o modelo relacional e o modelo orientado a objetos. O que é uma QuerySet? Uma QuerySet como o nome diz, é basicamente uma coleção de queries em SQL realizada pelo Django ORM para consultar o banco de dados. Uma QuerySet é "preguiçosa" (lazy) por definição, isso significa que a pesquisa não é feita imediatamente, apenas quando solicitado pela aplicação. Uma QS pode ser construída, filtrada, fatiada e movida entre lugares do código sem tocar na base. Nenhuma atividade no BD é realizada até que você utilize a QS de fato.
são alguns dos métodos mais comuns do Django pois representam consultas/ações corriqueiras num banco de dados. GET - Consulta o banco utilizando um conjunto de dados. Se nenhum dado com o atributo informado é encontrado, retorna um ModelDoesNotExist Error, o que ocasiona a quebra do fluxo de execução da aplicação (Exception). Equivalente a um “SELECT * from <model> WHERE <attr> = <value>” FILTER - Consulta o banco utilizando um conjunto de dados referentes ao modelo consultado. Ao contrário do GET, retorna um conjunto de resultados vazios e não quebra o fluxo de execução. ALL - Retorna todos os registros de um dado modelo. (SELECT * FROM <model>)
no/do banco utilizando um conjunto de dados. Retorna o registro salvo como uma instação da classe do modelo referenciado juntamente com um booleano dizendo se foi criado (created) ou atualizado. UPDATE_OR_CREATE(default, kwargs) - Atualiza ou cria um registro no banco de dados usando os atributos passados no dict default na chamada do método, se nenhum registro for encontrado, cria e retorna utilizando o mesmo default dict (aceita callables) BULK_CREATE - Cria em massa uma lista de instâncias do modelo ao mesmo tempo, economizando recursos e evitando gargalos IO.
baseado no campo informado. Ordena DESCENDENTE caso seja passado um índice negativo (“-created_date”) LAST - Retorna o último registro da pilha ordenado de acordo com o campo passado na chamada, se nenhum campo for passado, ordena por ID. FIRST - Retorna o primeiro registro EARLIEST e LATEST funciona exatamente como FIRST e LAST, porém, levantam um erro de DoesNotExist caso nenhum registro seja encontrado.
baseado no campo informado. Ordena DESCENDENTE caso seja passado um índice negativo (“-created_date”) LAST - Retorna o último registro da pilha ordenado de acordo com o campo passado na chamada, se nenhum campo for passado, ordena por ID. FIRST - Retorna o primeiro registro EARLIEST e LATEST funciona exatamente como FIRST e LAST, porém, levantam um erro de DoesNotExist caso nenhum registro seja encontrado.
dos registros selecionados utilizando filter(). Se usado sem filter, funciona como ALL. VALUES_LIST - Funciona como VALUES, porém retorna uma lista de tuplas com os valores, aceita o parâmetro FLAT opcionalmente, neste caso retorna uma lista de valores. Não possível utilizar FLAT para retorno com mais de um valor. Aceita NAMED também, neste caso retorna uma NAMEDTUPLE. DISTINCT - Elimina valores duplicados de uma consulta. Normalmente esses não ocorrem em uma consulta com ALL(), mas caso você esteja agregando valores ou realizando JOINS estes podem ocorrer, então é bom usar o distinct neste caso.
trazer os valores das relações FK do modelo para evitar ações de IO adicionais quando referenciar a chave estrangeira. Resulta em consultas mais performáticas. Também possível referenciar relações em em cascata utilizando DUNDER notation (<fk>__<fk2>) PREFETCH_RELATED - Funciona exatamente como o SELECT_RELATED mas, para relações Many2Many e Generic fields OBS: Qualquer operação DDL subsequente a um select/prefetch não utilizará o cache o que causara a limpeza do cache pré estabelecido bem como qualquer método encadeado após o cache inicial.
os registros que combinem com os argumentos passados para o método. DEFER - Ignora os campos especificados na transação e retorna os valores dos outros da tabela. Você pode fazer chamadas encadeadas usando defer e ir adicionando os campos ao retorno. ONLY - Funciona mais ou menos como DEFER. Retorna o valor dos campos que não devem ser ignorados.
em união de 1 ou mais QSs. Retorna valores distintos por padrão, para valores duplicados, utilize all=True INTERSECTION - Retorna os valores compartilhados entre as QSs informadas. DIFFERENCE - Retorna os elementos existentes em uma QS que não estão nas outras QSs (qs1.difference(qs2, qs3...)
resultado de uma queryset. Aceita expressões para agregações mais complexas. ANNOTATE - Nomeia os resultados realizados pelo Aggregate e retorna um conjunto de objetos.
condicionais para queryset. Não é possivel usar OU em uma queryset sem o metodo Q() - ~Q() nega a expressão utilizada - Q() | funciona como OR dentro de uma queryset - Q () & funciona como AND Além de metodos condicionais, voce pode compor querysets utilizando Q()