• Inicio
  • Iniciar sesión
  • Crear cuenta
  • Explorar cursos
  • Bootcamps
  • Precios
  • Blog

¡Califica el Curso Profesional de Backend!

Selecciona la calificación de 1 a 5 estrellas

Reporta un error

Curso Curso Profesional de Backend

Video Qué es un ORM

Tipo de error

Algo salió mal al cargar el vídeo

El vídeo no pudo cargarse, hemos enviado un reporte al equipo de desarrollo, para poder solucionarlo a la brevedad.

Mientras solucionamos el problema, intenta lo siguiente para solucionar el error:

  • Recarga la página
  • Intenta reiniciar tu navegador y luego vuelve a reproducir el vídeo
  • Vacía el caché de tu navegador
  • Intenta reproducir con las extensiones del navegador deshabilitadas
  • Intenta con un navegador distinto
  • Si el problema persiste contáctanos en Discord
home Ir al inicio report_problem Reportar falla star Valorar curso

Aunque podríamos desarrollar una aplicación web completa usando instrucciones SQL, estas pueden convertir nuestro código en uno muy verboso, complejo de entender y difícil de modificar.

Alternativamente, los desarrolladores backend usamos lo que se conocen como Object Relational Mapping, u ORM por sus siglas. Estas librerías se encargan de ofrecer clases y métodos para que podamos manipular la base de datos usando programación orientada a objetos.

Internamente, estos métodos se traducen a SQL para que las operaciones puedan ejecutarse sobre la base de datos. Además de eso, las instrucciones generadas por un ORM son usualmente seguras y optimizadas, esto porque los mejores ORM’s tienen años en desarrollo y son de código abierto, permitiendo que los mismos usuarios del ORM reporten y solucionen bugs, de modo que los resultados del ORM están en constante mejora.

Si aún no te imaginas cómo podrían verse las consultas SQL con objetos, considera este ejemplo con Sequelizejs, un ORM para NodeJS.

La inserción a nuestra tabla tasks pasaría de verse así:

db.run(`INSERT INTO tasks (description) VALUES (?)`,req.body.description);

A verse así:

Task.create({
 description: req.body.description
});

Como puedes ver, el ejemplo con objetos y métodos es más legible y claro que la instrucción SQL, por otro lado, aprender SQL es mucho más complejo que aprender a usar un ORM, como podrás ver del ejemplo mismo.

Sin embargo, es importante mencionar que para sacar el mayor provecho de un ORM, y poder optimizar las sentencias que se generan, sí debes saber SQL y fundamentos de bases de datos relacionales, recuerda que para eso puedes ver el Curso Profesional de Bases de Datos aquí mismo en CódigoFacilito.

Por otro lado, uno de los grandes beneficios de usar un ORM, es que nos permite intercambiar el motor de base de datos, sin tener que modificar el código que utilizamos, simplemente le decimos, ahora usa sqlite, y ahora usa Postgres, y la librería se encargará de generar el código SQL para el motor indicado.

Este es un beneficio muy valioso considerando que ciertos motores están mejor diseñados para tareas específicas, sqlite para el desarrollo del sitio, Postgres para el entorno en producción, etc.

En general, te recomiendo que, a menos que tengas una razón especial para no usar un ORM, siempre los utilices, protegerán tu aplicación de posibles ataques por una base de datos mal configurada, harán del motor de base de datos prescindible, de manera que no casarás tu aplicación con uno de ellos, y además las operaciones serán más fáciles de comprender y razonar cuando ves tu código, que si usas SQL.

  • check_circle_outline
    Módulo 1 | 8 clases

    Introducción

    expand_more
  • check_circle_outline
    Módulo 2 | 19 clases

    Http

    expand_more
  • check_circle_outline
    Módulo 3 | 11 clases

    Bases de Datos

    expand_more
    • done_all

      Clase 1

      El lenguaje SQL

    • done_all

      Clase 2

      Configurando SQLite

    • done_all

      Clase 3

      Qué son las bases de datos y por qué las usamos

    • done_all

      Clase 4

      Drivers de conexión

    • done_all

      Clase 5

      Crear una tabla (Primer consulta)

    • done_all

      Clase 6

      Qué es un CRUD

    • done_all

      Clase 7

      Insertar registros en la Base de Datos

    • done_all

      Clase 8

      Limpiar parámetros (sanitize)

    • done_all

      Clase 9

      Qué es un ORM

    • done_all

      Clase 10

      Configurar SequelizeJS

    • done_all

      Clase 11

      Bases de datos relacionales y no relacionales

  • check_circle_outline
    Módulo 4 | 24 clases

    Buenas prácticas de desarrollo.

    expand_more
  • check_circle_outline
    Módulo 5 | 14 clases

    Autenticación

    expand_more
  • check_circle_outline
    Módulo 6 | 14 clases

    Relaciones en la base de datos.

    expand_more
  • check_circle_outline
    Módulo 7 | 5 clases

    Websockets (realtime)

    expand_more
  • check_circle_outline
    Módulo 8 | 4 clases

    Entorno de producción

    expand_more
  • check_circle_outline
    Módulo 9.-

    Examen del curso

    expand_more
    • done_all

      Examen

      Examen final del curso

4 comentario(s)

Omar Gonzalez

08 Junio 20

more_vert
  • Resuelta
me sale un error html en postman al ejecutar con  
Task.create({
 description: req.body.description
});

500Internal Server Error

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>Error</title>
</head>

<body>
    <pre>ReferenceError: Task is not defined<br> &nbsp; &nbsp;at /Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/server.js:18:3<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/layer.js:95:5)<br> &nbsp; &nbsp;at next (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/route.js:137:13)<br> &nbsp; &nbsp;at Route.dispatch (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/route.js:112:3)<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/layer.js:95:5)<br> &nbsp; &nbsp;at /Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/index.js:281:22<br> &nbsp; &nbsp;at Function.process_params (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/index.js:335:12)<br> &nbsp; &nbsp;at next (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/index.js:275:10)<br> &nbsp; &nbsp;at urlencodedParser (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/body-parser/lib/types/urlencoded.js:100:7)<br> &nbsp; &nbsp;at Layer.handle [as handle_request] (/Users/omarsanchez/Documents/DEV/Backend/curso_backend/base_datos/node_modules/express/lib/router/layer.js:95:5)</pre>
</body>

</html>

Javier

24 Julio 19

1
more_vert
  • Resuelta
hay un typo en el texto, en esta oración "ahora usq sqlite, y ahora usa Postgres, "
Ver respuestas (1)

Jose Valencia

13 Junio 19

1
more_vert
  • Resuelta
Perfecta la nueva manera de escribir comentarios. Como siempre siguen mejorando.

Jose Valencia

13 Junio 19

1
more_vert
  • Resuelta
Hola, partiendo de que la sentencia SQL es :

db.run(`INSERT INTO tasks (description) VALUES (?)`,req.body.description);

Para esta traduccion en ORM

Task.create({
 description: req.body.description
});

No sería?:

Tasks.create({...

Gracias.

Qué es un ORM

arrow_back Siguiente arrow_forward
Curso Profesional de Backend