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 PythonO 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 exemploDicioná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 PythonO 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
: ListaListas 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_related
eprefetch_related
para reduzir o número de consultas ao banco de dados em relacionamentos. - Evite o
N+1 query problem
carregando 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