como-usar-sqlite-con-nodejs

Cómo usar una base de datos SQLite con Node.js

SQLite es una base de datos ligera y sin servidor que podemos utilizar fácilmente en nuestras aplicaciones Node.js.

Con Node.js y el paquete sqlite3, puedes conectar tu aplicación a una base de datos SQLite de forma rápida y sencilla.

Cómo conectar Node.js a SQLite

Para comenzar, asegúrate de tener Node.js instalado en tu sistema y luego instala el paquete sqlite3 utilizando NPM:

npm install sqlite3

Configuración de una DB en memoria

Similar a otros ejemplos de bases de datos, vamos a crear un archivo para manejar la conexión a SQLite. Por ejemplo, llamémoslo db.js.

import sqlite from 'sqlite3';

// Crear una conexión a una base de datos en memoria
const db = new sqlite.Database(':memory:');

// Operaciones con la base de datos
db.serialize(() => {
    // Crear una tabla
    db.run("CREATE TABLE lorem (info TEXT)");

    // Insertar datos en la tabla
    const stmt = db.prepare("INSERT INTO lorem VALUES (?)");
    for (let i = 0; i < 10; i++) {
        stmt.run("Ipsum " + i);
    }
    stmt.finalize();

    // Consultar datos de la tabla
    db.each("SELECT rowid AS id, info FROM lorem", (err, row) => {
        console.log(row.id + ": " + row.info);
    });
});

// Cerrar la conexión cuando hayas terminado
db.close();

En este ejemplo, estamos creando una base de datos SQLite en memoria (:memory:) y realizando operaciones CRUD básicas en ella.

Creación de una DB en un archivo

Si prefieres utilizar un archivo de base de datos físico en lugar de una base de datos en memoria, puedes hacerlo de la siguiente manera:

import sqlite from 'sqlite3';
const dbPath = './database.db'; // Ruta al archivo de base de datos

// Conectar a la base de datos en un archivo físico
const db = new sqlite.Database(dbPath);

// El resto del código es similar al ejemplo anterior
// ...

En este caso, estamos especificando una ruta al archivo de base de datos en lugar de utilizar la base de datos en memoria.

Operaciones CRUD

Una vez que tenemos el archivo de conexión, podemos utilizarlo para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en nuestra base de datos SQLite desde Node.js.

Creación de datos

Primero veamos cómo insertar nuevos datos en la base de datos:

async function insertData(name, email) {
  try {
    // Insertamos datos en la tabla users
    await db.run("INSERT INTO users (name, email) VALUES (?, ?)", [name, email]);
    console.log('Datos insertados exitosamente');
  } catch (error) {
    console.error('Error al insertar datos:', error);
  }
}

insertData('John Doe', 'john@example.com'); // Ejecutamos la función insertData con los datos proporcionados

Lectura de datos

Ahora veamos cómo obtener todos los usuarios de la base de datos:

async function fetchData() {
  try {
    // Consultamos todos los usuarios de la tabla users
    const users = await db.all("SELECT * FROM users");
    console.log('Todos los usuarios:', users);
  } catch (error) {
    console.error('Error al obtener datos:', error);
  }
}

fetchData(); // Ejecutamos la función fetchData para obtener todos los usuarios

Actualización de datos

Veamos cómo actualizaríamos datos en la base de datos:

async function updateData(userId, newName) {
  try {
    // Actualizamos el nombre del usuario con el userId especificado
    await db.run("UPDATE users SET name = ? WHERE id = ?", [newName, userId]);
    console.log('Datos actualizados exitosamente');
  } catch (error) {
    console.error('Error al actualizar datos:', error);
  }
}

updateData(1, 'Jane Smith'); // Ejecutamos la función updateData con los datos proporcionados

Eliminación de datos

Por último, veamos cómo eliminar datos de la base de datos:

async function deleteData(userId) {
  try {
    // Eliminamos el usuario con el userId especificado
    await db.run("DELETE FROM users WHERE id = ?", [userId]);
    console.log('Datos eliminados exitosamente');
  } catch (error) {
    console.error('Error al eliminar datos:', error);
  }
}

deleteData(2); // Ejecutamos la función deleteData con el ID del usuario a eliminar

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github github-full