Saltar al contenido

29 · Base de Datos

Consulta de Filas

db.query devuelve una lista de maps {columna: valor} que se puede iterar con for.

En esta página

db.query(sql) ejecuta un SELECT y devuelve Result<[Any], DbError>. Haz unwrap o gestiona el error; en caso de éxito, el valor es una lista de maps donde cada clave es el nombre de una columna. Se itera con for row in rows y se accede a los campos como row.name, row.qty — sin mapeo manual.

La lista soporta rows.len() y todos los métodos de colección de Zolo (.each, .filter, .map, etc.).

Selecciona elementos ordenados por cantidad e imprime cada fila con acceso directo al campo en el 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

Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.

Desafío

Añade un .filter a la lista rows para mostrar solo los elementos con qty > 8 sin modificar el SQL.

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br