a ORM pode ser uma ferramenta de aprendizagem. Leia as queries que estão sendo realizadas e experimente rodá-las direto no banco. A sintaxe do SQL é simples e intuitiva, em pouco tempo você aprende o básico. Observe a quantidade de queries sendo feitas e o tempo que elas demoram.
{ 'class': 'logging.StreamHandler', # Loga no terminal }, }, 'loggers': { 'django': { 'handlers': ['console'], 'level': 'DEBUG', # Exibe todas as queries }, }, } Ative os logs em nível DEBUG nos settings para ver as queries no terminal e no shell do Django.
são organizados em tabelas em que cada coluna define o nome e o tipo do campo que vai ser armazenado. As colunas que criam relações entre as tabelas são as chaves estrangeiras, onde uma entrada é uma referência a uma linha de outra tabela.
banco, portanto os métodos de instância deveriam realizar somente operações que afetam um objeto individual. - Properties que retornam atributos da entidade ou de objetos relacionados - Métodos que verificam estados e garantem sua integridade Responsabilidades
acessado pelo atributo objects, ele é responsável por fazer a interface entre o modelo e as operações no banco. Filme.objects.all() # Retorna todos os filmes
models.QuerySet e pode ser customizada da mesma forma que se faz com o manager. As tarefas de consulta no banco realizadas pelos managers são chamadas ao QuerySet do modelo. Um objeto QuerySet é um iterável e seus elementos são instâncias do modelo ou objetos python simples.
; - first() SELECT ... FROM ... table ORDER BY ... ASC LIMIT 1; - last() SELECT ... FROM ... table ORDER BY .. DESC LIMIT 1; - earliest('nome') SELECT ... FROM ... table ORDER BY ... ASC LIMIT 1; - latest('nome') SELECT ... FROM ... table ORDER BY .. DESC LIMIT 1;
...; ??? UPDATE table SET <FIELD> = <VALUE>, ... WHERE ...; ??? INSERT INTO table (...) VALUES (...); - bulk_create([Pessoa(nome='Maria'), Pessoa(nome='João')]) INSERT INTO table (<FIELDS>) SELECT ... UNION ALL SELECT ...; - delete() DELETE FROM table WHERE ...;
acessa o banco - filter(nome='Maria') SELECT ... FROM table WHERE ... - exclude(nome='Maria') SELECT ... FROM table WHERE NOT ... - distinct() SELECT DISTINCT ... FROM ... table
não receber argumentos • Retorna um QuerySet com dicts - values_list('nome') SELECT ... FROM table • Retorna um QuerySet com tuplas de valores - only('nome') SELECT ... FROM table - defer('nome') SELECT ... FROM table