Pular para o conteúdo

29 · Banco de Dados

Consulta de Linhas

db.query retorna uma lista de maps {coluna: valor} que pode ser iterada com for.

Nesta página

db.query(sql) executa um SELECT e retorna Result<[Any], DbError>. Faça unwrap ou trate o erro; em caso de sucesso, o valor é uma lista de maps onde cada chave é o nome de uma coluna. Você itera com for row in rows e acessa campos como row.name, row.qty — sem mapeamento manual.

A lista suporta rows.len() e todos os métodos de coleção do Zolo (.each, .filter, .map, etc.).

Seleciona itens ordenados por quantidade e imprime cada linha com campo direto no map de resultado.

03-query-rows.zolo
Playground
// Feature: Database — `db.query(sql)` returns a list of rows

// Syntax: each row is a `{col: value}` map; iterate with `for row in rows`.

// When to use: SELECT in general; Zolo serializes the result into maps.


use std::database::Database

let db = Database.open("sqlite://:memory:").unwrap()
defer db.close()

db.execute(sql"CREATE TABLE items (id INTEGER PRIMARY KEY, name TEXT, qty INTEGER)").unwrap()
db.execute(sql"INSERT INTO items VALUES (1, 'apple', 10)").unwrap()
db.execute(sql"INSERT INTO items VALUES (2, 'banana', 5)").unwrap()
db.execute(sql"INSERT INTO items VALUES (3, 'cherry', 20)").unwrap()

let rows = db.query(sql"SELECT * FROM items ORDER BY qty DESC").unwrap()
print("total: {rows.len()}")

// expected: total: 3


for row in rows {
  print("  {row.id}: {row.name} x{row.qty}")
}
// expected:

//   3: cherry x20

//   1: apple x10

//   2: banana x5

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Desafio

Adicione um .filter na lista rows para exibir apenas os itens com qty > 8 sem alterar o SQL.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br