Exemplos
Guia Completo das Funções e Utilitários ORM¶
☝️ Como começar¶
Antes de usar as funções do QuerySet, gere os modelos com:
from wborm.utils import generate_model, generate_all_models
# Para uma única tabela:
generate_model("clientes", conn)
# Para todas as tabelas:
generate_all_models(conn)
Isso criará variáveis globais com o nome das tabelas, permitindo chamadas diretas como clientes.filter(...).
🔍 Funções do QuerySet¶
filter(*args, **kwargs)¶
Adiciona cláusulas WHERE à consulta.
Exemplo:
clientes.filter(nome='João', idade=30)
clientes.filter("idade > 25")
+--------+-------+
| nome | idade |
+========+=======+
| João | 30 |
+--------+-------+
filter_in(column, values)¶
Filtra valores com cláusula IN.
Exemplo:
clientes.filter_in("cidade", ["SP", "RJ"])
SELECT * FROM clientes WHERE cidade IN ('SP', 'RJ')
not_in(column, values)¶
Filtra valores com cláusula NOT IN.
Exemplo:
clientes.not_in("status", ["inativo"])
SELECT * FROM clientes WHERE status NOT IN ('inativo')
join(other, on)¶
Adiciona um JOIN à consulta.
Exemplo:
clientes.join("vendas", on="id_cliente")
SELECT * FROM clientes JOIN vendas ON clientes.id_cliente = vendas.id_cliente
limit(n) e offset(n)¶
Define o número máximo de registros retornados e o offset para paginação.
clientes.limit(10).offset(20)
SELECT SKIP 20 FIRST 10 * FROM clientes
order_by(*fields)¶
Ordena os resultados.
clientes.order_by("nome", "-data_criacao")
SELECT * FROM clientes ORDER BY nome, data_criacao DESC
select(*fields)¶
Seleciona campos específicos.
clientes.select("id", "nome").limit(5).show()
+----+--------+
| id | nome |
+====+========+
| 1 | João |
| 2 | Maria |
+----+--------+
group_by(*fields) + having(condition)¶
Agrupa resultados e aplica filtros sobre agregações.
clientes.select("cidade", "COUNT(*) as total")\
.group_by("cidade")\
.having("total > 10")
+---------+--------+
| cidade | total |
+=========+========+
| SP | 150 |
| RJ | 120 |
+---------+--------+
distinct()¶
Remove duplicatas.
clientes.select("nome").distinct().show()
+--------+
| nome |
+========+
| João |
| Maria |
+--------+
raw_sql(sql)¶
Executa SQL puro.
clientes.raw_sql("SELECT * FROM clientes WHERE idade > 30").all()
exists()¶
Retorna True se houver resultados.
if clientes.filter(ativo=True).exists():
print("OK")
live()¶
Desativa o cache da consulta.
clientes.live().filter(ativo=True).all()
all() e first()¶
Executa a consulta e retorna todos os resultados ou apenas o primeiro.
clientes.all()
clientes.first()
count()¶
Retorna o número de registros encontrados.
clientes.filter(ativo=True).count()
42
show(tablefmt="grid")¶
Renderiza os resultados em tabela.
clientes.select("nome").limit(5).show()
+--------+
| nome |
+========+
| João |
| Maria |
+--------+
pivot(index, columns, values)¶
Transforma a consulta em tabela dinâmica.
clientes.select("cidade", "status", "COUNT(*) as total")\
.group_by("cidade", "status")\
.pivot(index="cidade", columns="status", values="total")
+-----------+--------+----------+
| cidade | ativo | inativo |
+===========+========+==========+
| SP | 100 | 20 |
| RJ | 70 | 10 |
+-----------+--------+----------+
create_temp_table(temp_name)¶
Cria uma tabela temporária a partir da consulta atual.
temp = clientes.filter(ativo=True).create_temp_table("clientes_ativos")
CREATE TEMP TABLE clientes_ativos AS (SELECT * FROM clientes WHERE ativo = 'True') WITH NO LOG
⚙️ Funções do Modelo¶
add(confirm=True)¶
Adiciona um novo registro ao banco.
cliente = clientes(id=1, nome="João")
cliente.add(confirm=True)
bulk_add([...], confirm=True)¶
Adiciona vários registros de uma vez.
clientes.bulk_add([
clientes(id=2, nome="Maria"),
clientes(id=3, nome="Carlos")
], confirm=True)
update(confirm=True, **where)¶
Atualiza o registro atual no banco com base na cláusula.
cliente.nome = "João Silva"
cliente.update(confirm=True, id=1)
delete(confirm=True, **where)¶
Exclui o registro do banco.
cliente.delete(confirm=True, id=1)
create_table()¶
Cria a tabela no banco de dados com base nos campos definidos no modelo.
clientes.create_table()
CREATE TABLE clientes (id INT NOT NULL PRIMARY KEY, nome VARCHAR(255))
🎨 Cores e Feedback Visual¶
Logs com Cores (via termcolor):¶
- ✅ Verde: inserções (
add,bulk_add) - 🟡 Amarelo: atualizações (
update) - ❌ Vermelho: erros ou exclusões (
delete) - 🔵 Azul / 🔷 Ciano: mensagens informativas e tabelas de cache
Tabelas Renderizadas com Cor¶
- Quando
show()oupivot()são chamados: - Modelos carregados do cache: bordas azuis 🔵
- Modelos criados dinamicamente: bordas verdes ✅
✅ Exemplo Completo¶
# Gera o modelo
generate_model("clientes", conn)
# Consulta com encadeamento
clientes.select("nome", "cidade")\
.filter("idade > 25")\
.order_by("nome")\
.limit(5)\
.show()
Saída esperada:
+----------+-------------------+
| nome | cidade |
+==========+===================+
| João | São Paulo |
| Maria | Rio de Janeiro |
+----------+-------------------+
# Criar e exibir uma tabela dinâmica
clientes.select("cidade", "status", "COUNT(*) as total")\
.group_by("cidade", "status")\
.pivot(index="cidade", columns="status", values="total")
Saída:
+-----------+--------+----------+
| cidade | ativo | inativo |
+===========+========+==========+
| SP | 100 | 20 |
| RJ | 70 | 10 |
+-----------+--------+----------+