Ir para o conteúdo

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")
Saída:
+--------+-------+
| nome   | idade |
+========+=======+
| João   | 30    |
+--------+-------+


filter_in(column, values)

Filtra valores com cláusula IN.

Exemplo:

clientes.filter_in("cidade", ["SP", "RJ"])
Saída:
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"])
Saída:
SELECT * FROM clientes WHERE status NOT IN ('inativo')


join(other, on)

Adiciona um JOIN à consulta.

Exemplo:

clientes.join("vendas", on="id_cliente")
Saída:
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)
Saída:
SELECT SKIP 20 FIRST 10 * FROM clientes


order_by(*fields)

Ordena os resultados.

clientes.order_by("nome", "-data_criacao")
Saída:
SELECT * FROM clientes ORDER BY nome, data_criacao DESC


select(*fields)

Seleciona campos específicos.

clientes.select("id", "nome").limit(5).show()
Saída:
+----+--------+
| 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")
Saída:
+---------+--------+
| cidade  | total  |
+=========+========+
| SP      | 150    |
| RJ      | 120    |
+---------+--------+


distinct()

Remove duplicatas.

clientes.select("nome").distinct().show()
Saída:
+--------+
| 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()
Saída:
42


show(tablefmt="grid")

Renderiza os resultados em tabela.

clientes.select("nome").limit(5).show()
Saída:
+--------+
| 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")
Saída:
+-----------+--------+----------+
| 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")
Saída esperada:
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)
Cor de log: Verde ✅


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)
Cor de log: Verde ✅


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)
Cor de log: Amarelo 🟡


delete(confirm=True, **where)

Exclui o registro do banco.

cliente.delete(confirm=True, id=1)
Cor de log: Vermelho ❌


create_table()

Cria a tabela no banco de dados com base nos campos definidos no modelo.

clientes.create_table()
Saída esperada:
CREATE TABLE clientes (id INT NOT NULL PRIMARY KEY, nome VARCHAR(255))
Cor de log: Ciano 🔷


🎨 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() ou pivot() 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       |
+-----------+--------+----------+