Por Luferat em 02/11/2026
O Django conta com um poderoso ORM, compatível com os bancos de dados SQL mais populares do mercado.
ORM (Object-Relational Mapping) é uma técnica que permite trabalhar com bancos de dados relacionais utilizando objetos e classes de uma linguagem de programação, em vez de escrever comandos SQL diretamente.
O ORM faz a tradução entre os objetos do código e as tabelas do banco de dados.
Uma vantagem do ORM é que podemos, por exemplo, desenvolver em um banco de dados SQLite3 e usar o MySQL no deploy de produção do aplicativo, sem alterar códigos de consulta. Basta instalar o driver do MySQL e alterar os ajustes no settings.py (ou .env ← Veremos isso em breve!), dependendo do ambiente.
Mais algumas vantagens:
Reduz a necessidade de escrever SQL manualmente.
Facilita operações CRUD (inserir, consultar, atualizar e excluir).
Permite trabalhar com diferentes bancos de dados.
Facilita a manutenção e organização do código.
Mantenha Ctrl pressionada ao clicar no link! → Como funciona o ORM
Antes de descrever programaticamente o banco de dados, vamos listar a estrutura da tabela de postagens do "Blog". Pensando em uma estrutura simples:
Tabela POST
Campo Tipo de Dado Descrição
id INTEGER Chave primária da tabela
created_at DATETIME Data de criação da postagem
thumbnail STRING ou URL URL da imagem que representa a postagem
title STRING Título da postagem
summary STRING Resumo da postagem
textbody TEXT* Corpo da postagem. TEXT é um STRING de grande capacidade
views INTEGER Registra a quantidade de visualizações da postagem
user_id INTEGER Chave estrangeira para o proprietário da postagem
is_active BOOLEAN Se TRUE, a postagem está ativa. FALSE oculta a postagem do Blog
is_deleted BOOLEAN Se TRUE, a postagem está "definitivamente" excluída do BLog
Se estivermos descrevendo essa tabela para o SQLite3, teríamos algo como:
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
thumbnail TEXT,
title TEXT NOT NULL,
summary TEXT,
textbody TEXT,
views INTEGER DEFAULT 0,
is_active INTEGER DEFAULT 1,
is_deleted INTEGER DEFAULT 0,
FOREIGN KEY (user_id) REFERENCES user(id)
);
Já para MySQL, teríamos algo como:
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
user_id INTEGER NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
thumbnail VARCHAR(255),
title VARCHAR(150) NOT NULL,
summary VARCHAR(255),
textbody TEXT,
views INTEGER DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE,
is_deleted BOOLEAN DEFAULT FALSE,
FOREIGN KEY (user_id) REFERENCES user(id)
) ENGINE=InnoDB;
O SQLite pode operar em "modo compatibilidade" com o MySQL, então, se usar o SQL acima, do MySQL, no SQLite3, provavelmente terá sucesso!
No Django, como estamos usando o ORM, vamos modelar usando Python em vez de SQL. Abra o arquivo blog/models.py no VSCode e deixe com esse código:
Mantenha Ctrl pressionada ao clicar no link!
Clique em Row no código para visualizar...
Essa classe representa a tabela POST do banco de dados como uma "entidade" (objeto) do aplicativo e cada atributo representa uma coluna ou campo (title, summary, textbody...).
Observe que user_id é uma chave estrangeira para o "ID" de um usuário válido na tabela de usuários do próprio Django, representada por AUTH_USER_MODEL.
Os tipos* de campo mais comuns no ORM são:
Campo Uso
CharField Textos curtos
EmailField E-mails
IntegerField Números inteiros
TextField Textos longos
BooleanField Verdadeiro/Falso
DateField Datas
DateTimeField Data e hota
URLField URLs
Existem diversos outros tipos de campos no ORM Django. Consulte-os aqui!