Knex.js para JavaScript (Node.js): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Knex.js para JavaScript (Node.js): guía completa con ejemplos

1. ¿Qué es Knex.js y para qué sirve?

Knex.js es un potente, flexible y eficiente constructor de consultas SQL (query builder) para Node.js. A diferencia de las bibliotecas ORM (Object-Relational Mapping) como Sequelize o TypeORM, Knex.js no intenta abstraerte por completo del SQL. En su lugar, ofrece una API encadenable (chainable) para construir consultas SQL de forma programática, manteniendo el control total sobre el SQL resultante. Esto convierte a Knex.js en la opción ideal para proyectos donde la velocidad, la transparencia de las consultas y la flexibilidad son clave, pero sin tener que escribir SQL en crudo con el riesgo de errores sintácticos o inyecciones SQL.

El objetivo principal de Knex.js es simplificar la interacción con bases de datos relacionales (PostgreSQL, MySQL, SQLite3, MSSQL, Oracle) desde JavaScript. Se encarga de tareas rutinarias como el escape de identificadores y valores (protección contra inyecciones SQL), la gestión del pool de conexiones, las migraciones del esquema de datos (crear y modificar tablas) y el "sembrado" (seeding) de datos de prueba. Knex.js también soporta transacciones, subconsultas, funciones de ventana, consultas raw y mucho más, lo que lo convierte en una herramienta versátil tanto para proyectos pequeños como para sistemas de alta carga.

Para el sitio educativo PythonLib, que se enfoca en el aprendizaje práctico, Knex.js es especialmente interesante. Permite a los estudiantes que ya conocen los fundamentos de SQL pasar rápidamente a escribir código seguro y eficiente en Node.js. Aprender Knex.js es un puente excelente entre la teoría de SQL y el desarrollo backend real. No solo aprendes "magia" de ORM, sino que entiendes cómo cada método se traduce en una consulta SQL concreta, algo fundamental para la depuración y la optimización.

2. Instalación

La instalación de Knex.js se realiza a través del gestor de paquetes npm. También necesitarás instalar el controlador (driver) para tu base de datos.

# Instalar Knex.js
npm install knex --save

# Instalar el driver para PostgreSQL
npm install pg --save

# Instalar el driver para MySQL / MariaDB
npm install mysql2 --save

# Instalar el driver para SQLite3
npm install sqlite3 --save

# Instalar el driver para MSSQL
npm install tedious --save

# Instalar el driver para Oracle
npm install oracledb --save

Importante: El driver de la base de datos se instala por separado. Knex.js lo utiliza para la comunicación directa con la BD. Después de la instalación, puedes instalar globalmente la CLI de Knex para gestionar migraciones y semillas: npm install knex -g.

3. Inicio rápido — ejemplo mínimo funcional

Crea un archivo app.js y conéctate a una base de datos SQLite (no requiere instalar un servidor).

// Importar Knex
const knex = require('knex');

// Configuración de conexión a SQLite
const db = knex({
    client: 'sqlite3', // Tipo de base de datos
    connection: {
        filename: './mydb.sqlite' // Ruta al archivo de la base de datos
    },
    useNullAsDefault: true // Recomendado para SQLite
});

// Función asíncrona para la demostración
async function main() {
    // 1. Crear la tabla 'users' si no existe
    await db.schema.createTableIfNotExists('users', (table) => {
        table.increments('id'); // Clave primaria autoincremental
        table.string('name');   // Campo de texto
        table.integer('age');   // Campo numérico entero
    });

    // 2. Insertar datos
    await db('users').insert({ name: 'Alice', age: 30 });
    await db('users').insert({ name: 'Bob', age: 25 });

    // 3. Seleccionar todos los registros
    const users = await db.select('*').from('users');
    console.log('Todos los usuarios:', users);

    // 4. Seleccionar con condición
    const youngUsers = await db('users').where('age', '<', 28)                    

Recommendations