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 |
+-----------+--------+----------+