Migrations e EF Core: Evolua seu Banco com Segurança
Aprenda Django ORM: Consultas, Relações e Otimizações
Dominar bancos de dados é essencial para aplicações web modernas, mas escrever SQL manualmente pode ser desafiador. O Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. ORM (Object-Relational Mapper) permite interagir com bancos de dados usando Python
O que é Python e por que utilizá-lo?Aprenda por que Python é a escolha ideal para iniciantes. Descubra sua sintaxe simples, versatilidade e forte comunidade que ajudam no seu desenvolvimento. puro, aumentando produtividade e segurança. Vamos explorar como criar consultas complexas, gerenciar relacionamentos e otimizar performance sem escrever uma linha de SQL!
# Exemplo Rápido: Consulta ORM vs SQL
from minhaapp.models import Produto
# ORM
produtos_baratos = Produto.objects.filter(preco__lt=100).exclude(estoque=0)
# SQL equivalente
"""
SELECT * FROM produto
WHERE preco < 100
AND NOT (estoque = 0)
"""
O que é Django ORM?🔗
O Django ORM é uma camada de abstração que permite interagir com o banco de dados usando objetos Python. Em vez de escrever consultas SQL diretamente, você define modelos (classes Python
O que é Python e por que utilizá-lo?Aprenda por que Python é a escolha ideal para iniciantes. Descubra sua sintaxe simples, versatilidade e forte comunidade que ajudam no seu desenvolvimento.) que representam tabelas no banco de dados. O ORM traduz essas operações em SQL automaticamente, permitindo que você se concentre na lógica do negócio.
Por exemplo
Dicionários: armazenando e acessando dados por chavesAprenda a usar dicionários em Python para organizar e manipular dados com praticidade. Tutorial completo com exemplos e dicas para otimizar seu código., em vez de escrever:
SELECT * FROM users WHERE age > 25;
Você pode escrever:
User.objects.filter(age__gt=25)
Isso torna o código mais legível, fácil de manter e menos propenso a erros.
Índice🔗
- 🔨 Modelos: A Base de Tudo
- 🔍 Querysets: Seu Superpoder
- 🤝 Relações entre Modelos
- 🔄 Migrações: Evolução Segura
- ⚡ Otimização de Consultas
- 📚 Conteúdo Avançado
🔨 Modelos: A Base de Tudo🔗
Cada modelo Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. representa uma tabela no banco. Veja como mapear conceitos do mundo real:
from django.db import models
class Cliente(models.Model):
nome = models.CharField(max_length=100)
email = models.EmailField(unique=True)
data_cadastro = models.DateTimeField(auto_now_add=True)
premium = models.BooleanField(default=False)
class Meta:
verbose_name = "Cliente"
ordering = ['-data_cadastro']
def __str__(self):
return f"{self.nome} ({self.email})"
Campos Essenciais:
CharField/TextField: Para textosIntegerField/FloatField: NúmerosBooleanField: True/FalseDateTimeField: Datas com horasForeignKey: Relacionamentos 1-N
Criando e Migrando Modelos🔗
Para começar, você precisa definir seus modelos. Um modelo é uma classe Python
O que é Python e por que utilizá-lo?Aprenda por que Python é a escolha ideal para iniciantes. Descubra sua sintaxe simples, versatilidade e forte comunidade que ajudam no seu desenvolvimento. que herda de django.db.models.Model. Cada atributo da classe representa uma coluna no banco de dados.
from django.db import models
class Produto(models.Model):
nome = models.CharField(max_length=100)
preco = models.DecimalField(max_digits=10, decimal_places=2)
estoque = models.IntegerField()
Depois de definir o modelo, você precisa criar as migrações e aplicá-las ao banco de dados:
python manage.py makemigrations
python manage.py migrate
🔍 Querysets: Seu Superpoder🔗
Querysets são consultas preguiçosas (lazy) que você pode encadear:
# Filtros encadeados
clientes_ativos = Cliente.objects.filter(
premium=True
).exclude(
email__endswith="@dominio.com"
).order_by('nome')
# Consultas complexas com Q objects
from django.db.models import Q
resultados = Produto.objects.filter(
Q(preco__gt=500) | Q(categoria__nome='Eletrônicos')
.get(): Retorna um único objeto.first()/.last(): Primeiro/último resultado.exists(): Verifica se há registros.count(): Número de resultados
Consultas Básicas com QuerySets🔗
O Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. ORM usa QuerySets para realizar consultas ao banco de dados. Um QuerySet é uma coleção de objetos que você pode filtrar, ordenar e manipular.
Exemplos de consultas básicas:
- Recuperar todos os objetos:
produtos = Produto.objects.all()
- Recuperar um objeto específico (por ID):
produto = Produto.objects.get(id=1)
- Criar um novo objeto:
novo_produto = Produto(nome="Notebook", preco=4500.00, estoque=10)
novo_produto.save()
Filtros e Anotações🔗
O Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. ORM oferece uma sintaxe poderosa para filtrar e anotar resultados. Você pode usar filtros para buscar objetos que atendem a determinadas condições.
Exemplos:
- Filtrar produtos com preço maior que 100:
produtos_caros = Produto.objects.filter(preco__gt=100)
- Filtrar produtos que começam com "Teclado":
teclados = Produto.objects.filter(nome__startswith="Teclado")
- Anotar a quantidade média de estoque:
from django.db.models import Avg
media_estoque = Produto.objects.aggregate(Avg('estoque'))
🤝 Relações entre Modelos🔗
Domine os 3 tipos de relacionamentos:
class Pedido(models.Model):
cliente = models.ForeignKey(Cliente, on_delete=models.CASCADE)
produtos = models.ManyToManyField(Produto, through='ItemPedido')
data = models.DateTimeField(auto_now_add=True)
class ItemPedido(models.Model):
pedido = models.ForeignKey(Pedido, on_delete=models.CASCADE)
produto = models.ForeignKey(Produto, on_delete=models.CASCADE)
quantidade = models.IntegerField()
class PerfilCliente(models.Model):
cliente = models.OneToOneField(Cliente, on_delete=models.CASCADE)
endereco = models.TextField()
Quando Usar Cada:
ForeignKey: 1-N (Um cliente tem muitos pedidos)ManyToMany: N-N (Produtos em vários pedidos)OneToOne: 1-1 (Extensão de modelo)
Relacionamentos entre Modelos🔗
O Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. ORM suporta relacionamentos como OneToOne, ForeignKey e ManyToMany. Esses relacionamentos permitem conectar modelos de forma eficiente.
class Categoria(models.Model):
nome = models.CharField(max_length=100)
class Produto(models.Model):
nome = models.CharField(max_length=100)
categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE)
Consultas com relacionamentos:
- Recuperar todos os produtos de uma categoria:
produtos = Produto.objects.filter(categoria__nome="Eletrônicos")
🔄 Migrações: Evolução Segura🔗
O sistema de migrações do Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. versiona seu esquema de banco:
# Comandos essenciais
python manage.py makemigrations # Cria a migração
python manage.py migrate # Aplica as mudanças
python manage.py sqlmigrate 0001 # Mostra o SQL gerado
1. Sempre testar migrações em ambiente de desenvolvimento
2. Usar --dry-run para simular operações
3. Versionar arquivos
📁 Trabalhando com Arquivos: Leia, Escreva e Serialize como um Ninja!Domine as técnicas de manipulação de arquivos em Python. Aprenda a ler, escrever e serializar dados com práticas seguras e eficientes. de migração no Git
4. Resolver conflitos com makemigrations --merge
⚡ Otimização de Consultas🔗
Evite o temido "N+1 queries problem" com:
# SELECT RELATED (JOIN)
pedidos = Pedido.objects.select_related('cliente')[:10]
# PREFETCH RELATED (Consultas separadas otimizadas)
pedidos = Pedido.objects.prefetch_related('produtos').all()
# ONLY/DEFER (Carrega campos específicos)
clientes = Cliente.objects.only('nome', 'email')
Ferramentas de Análise:
django: Inspecione queries
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web.-debug-toolbar.explain(): Mostra plano de execuçãoconnection.queries: Lista
Listas em Python: criando, acessando e manipulando elementosAprenda a manipular listas em Python com exemplos práticos, técnicas de fatiamento, adição, remoção e métodos que facilitam o gerenciamento de dados. todas as queries executadas
# Exemplo de explain()
print(Pedido.objects.filter(total__gt=100).explain())
Resultado Esperado:
Seq Scan on pedido (cost=0.00..25.50 rows=5 width=85)
Filter: (total > 100)
📚 Conteúdo Avançado🔗
Consultas Avançadas: Aggregations e Subqueries
Para operações mais complexas, o Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. ORM oferece funcionalidades como agregações (aggregate) e subconsultas (Subquery).
from django.db.models import Sum
total_estoque = Produto.objects.aggregate(Sum('estoque'))
from django.db.models import OuterRef, Subquery
subquery = Produto.objects.filter(categoria=OuterRef('pk')).values('categoria').annotate(total=Sum('estoque'))
categorias = Categoria.objects.annotate(total_estoque=Subquery(subquery.values('total')))
Dicas de Performance e Otimização
- Use
select_relatedeprefetch_relatedpara reduzir o número de consultas ao banco de dados em relacionamentos. - Evite o
N+1 query problemcarregando objetos relacionados de forma eficiente. - Utilize índices em campos que são frequentemente filtrados ou ordenados.
produtos = Produto.objects.select_related('categoria').all()
Conclusão🔗
O Django
🚀 Flask vs Django: Escolha sua Arma Web!Descubra, com exemplos práticos e comparações técnicas, quando usar Flask para prototipagem ou Django para sistemas complexos e escaláveis em projetos web. ORM é uma ferramenta incrivelmente poderosa que permite trabalhar com bancos de dados de forma eficiente e segura. Com prática e conhecimento das funcionalidades avançadas, você pode criar consultas complexas sem precisar escrever SQL manualmente. 🚀
Pronto para dominar o banco de dados sem digitar uma única query em SQL? Comece a praticar e explore cada recurso, adaptando os exemplos à sua realidade!
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação do Django Framework: docs.djangoproject.com
- Documentação do Flask: flask.palletsprojects.com
- Documentação Oficial do Python: docs.python.org/3/
- Python Package Index (PyPI): pypi.org
- Repositório Oficial da Linguagem Python: github.com/python/cpython
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 9 months atrás
há 9 months atrás
há 9 months atrás
há 9 months atrás
há 9 months atrás