← Todos los tutoriales
web-app 8 min

Leer de una Base de Datos

La mayoría de las aplicaciones web almacenan datos en una base de datos. Con frame.data, escribes SQL directamente en tu código Clean Language y obtienes resultados como JSON — sin capa ORM, sin magia, solo SQL simple con parametrización segura.

Agrega frame.data a los plugins y usa db.query para ejecutar SQL:

plugins:\n    frame.server\n    frame.data\n\nendpoints server:\n    GET "/status" :\n        string result = db.query("SELECT CAST(COUNT(*) AS CHAR) as cnt FROM users", "[]")\n        string count = json.get(result, "data.rows.0.cnt")\n        return http.respond(200, "text/plain", "We have " + count + " users")
GET /status → We have 42 users

db.query() recibe un string SQL y un array JSON de parámetros. "[]" significa sin parámetros. Los resultados vienen como JSON con un array data.rows. json.get() con una ruta de punto lee el campo de la primera fila.

Usa marcadores ? para pasar valores de URL a la consulta de forma segura:

    GET "/users/:username" :\n        string username = req.param("username")\n        string params = "[\\"" + username + "\\"]"\n        string result = db.query("SELECT email FROM users WHERE username = ? LIMIT 1", params)\n        string email = json.get(result, "data.rows.0.email")\n        if email == ""\n            return http.respond(404, "text/plain", "User not found")\n        return http.respond(200, "text/plain", "Email: " + email)
GET /users/alice  → Email: alice@example.com\nGET /users/nobody → 404 User not found

Usa siempre marcadores ? para los valores — nunca concatenes entradas del usuario en strings SQL. Construye params como un string de array JSON donde cada valor está entre comillas escapadas. CAST(... AS CHAR) asegura que los resultados numéricos vuelvan como strings.

Resumen rápido

  • Agrega frame.data a plugins: para habilitar el acceso a la base de datos
  • db.query(sql, params) — sql usa marcadores ?, params es un string de array JSON
  • json.get(result, "data.rows.0.columna") lee el campo de la primera fila
  • NUNCA concatenes entradas del usuario en SQL — usa siempre marcadores ?
¡Copiado!