1. ¿Qué es Sequelize y para qué sirve?
\n\nSequelize es una potente biblioteca ORM (Object-Relational Mapping) para Node.js que admite el trabajo con bases de datos relacionales: PostgreSQL, MySQL, MariaDB, SQLite y Microsoft SQL Server. ORM permite a los desarrolladores interactuar con la base de datos utilizando un enfoque orientado a objetos en lugar de escribir consultas SQL puras.
\n\nPrincipales ventajas de usar Sequelize:
\n- \n
- Abstracción de SQL — trabajar con tablas a través de objetos y métodos de JavaScript \n
- Seguridad — protección automática contra inyecciones SQL \n
- Migraciones — gestión de cambios en el esquema de la base de datos \n
- Relaciones — implementación sencilla de relaciones entre tablas (1:1, 1:M, M:N) \n
- Validación — mecanismos integrados de verificación de datos \n
- Transacciones — soporte para operaciones atómicas \n
Sequelize es ideal para crear APIs REST, aplicaciones web con Express.js, bots y cualquier proyecto que requiera un trabajo fiable con bases de datos SQL.
\n\n2. Instalación
\n\nLa instalación de Sequelize y el controlador para su base de datos se realiza mediante npm:
\n\n// Paquete base\nnpm install sequelize\n\n// Controlador para PostgreSQL\nnpm install pg pg-hstore\n\n// Controlador para MySQL\nnpm install mysql2\n\n// Controlador para SQLite\nnpm install sqlite3\n\n// Controlador para MSSQL\nnpm install tedious\n\nPara un inicio rápido con SQLite (no requiere instalación de servidor):
\nnpm install sequelize sqlite3\n\n3. Inicio rápido con ejemplo de código
\n\nCreemos una aplicación simple para gestionar usuarios:
\n\n// index.js\nconst { Sequelize, DataTypes, Model } = require('sequelize');\n\n// 1. Conexión a la base de datos (SQLite)\nconst sequelize = new Sequelize({\n dialect: 'sqlite',\n storage: './database.sqlite',\n logging: false // desactiva el registro de consultas SQL\n});\n\n// 2. Definición del modelo User\nclass User extends Model {}\nUser.init({\n id: {\n type: DataTypes.INTEGER,\n autoIncrement: true,\n primaryKey: true\n },\n name: {\n type: DataTypes.STRING,\n allowNull: false\n },\n email: {\n type: DataTypes.STRING,\n allowNull: false,\n unique: true,\n validate: {\n isEmail: true\n }\n },\n age: {\n type: DataTypes.INTEGER,\n validate: {\n min: 0,\n max: 150\n }\n }\n}, {\n sequelize,\n modelName: 'User',\n timestamps: true // añade createdAt y updatedAt\n});\n\n// 3. Sincronización con la BD y operaciones de prueba\nasync function main() {\n await sequelize.sync({ force: true }); // crea la tabla de nuevo\n console.log('Tabla User creada');\n\n // Creación de usuario\n const user = await User.create({\n name: 'Iván Petrov',\n email: 'ivan@example.com',\n age: 30\n });\n console.log('Usuario creado:', user.toJSON());\n\n // Búsqueda de todos los usuarios\n const users = await User.findAll();\n console.log('Todos los usuarios:', JSON.stringify(users, null, 2));\n\n // Búsqueda por ID\n const foundUser = await User.findByPk(1);\n console.log('Usuario encontrado:', foundUser.name);\n\n // Actualización\n await User.update({ age: 31 }, { where: { id: 1 } });\n console.log('Edad actualizada');\n\n // Eliminación\n await User.destroy({ where: { id: 1 } });\n console.log('Usuario eliminado');\n}\n\nmain().catch(console.error);\n\n4. Métodos y funciones principales
\n\n4.1. Sequelize.define() / Model.init()
\nDescripción: Definición del modelo (tabla) especificando los campos y sus tipos.
\nParámetros:
\n- \n
modelName— nombre del modelo \n attributes— objeto con la definición de los campos \n options— configuración del modelo (tableName, timestamps, indexes, etc.) \n