SQLite

SQLite es un motor de base de datos relacional que permite almacenar, consultar y manipular datos estructurados. Se utiliza ampliamente en aplicaciones que requieren una base de datos local y no necesitan una infraestructura de servidor compleja. Por ejemplo, se puede emplear en aplicaciones mΓ³viles, aplicaciones de escritorio y pequeΓ±as aplicaciones web.

Ventajas y Desventajas de SQLite

Ventajas

  1. Ligereza: SQLite no requiere una instalaciΓ³n de servidor adicional y se ejecuta dentro del propio proceso de la aplicaciΓ³n, lo que implica un bajo consumo de recursos.

  2. Portabilidad: Al ser una base de datos de archivo ΓΊnico, es fΓ‘cil moverla y transportarla entre sistemas operativos y dispositivos.

  3. Rendimiento: La arquitectura sin servidor de SQLite lo convierte en una opciΓ³n eficiente para operaciones de acceso a datos rΓ‘pidas y locales.

  4. Simplicidad: La sintaxis SQL de SQLite es fΓ‘cil de entender y su modelo de datos es simple de manejar.

Desventajas

  1. Capacidad Limitada: SQLite es ideal para aplicaciones con cantidades moderadas de datos. Para proyectos con grandes volΓΊmenes de datos y operaciones concurrentes, otras bases de datos como MySQL o PostgreSQL pueden ser mΓ‘s adecuadas.

  2. Acceso Concurrente Limitado: SQLite no es Γ³ptimo para aplicaciones con mΓΊltiples usuarios que requieran acceso simultΓ‘neo y concurrencia en escritura intensiva.

  3. Escalabilidad: Si se espera un crecimiento significativo en el volumen de datos, puede ser mΓ‘s complicado escalar SQLite que otras bases de datos orientadas a servidores.

CuΓ‘ndo Usar y No Usar SQLite

CuΓ‘ndo Usar SQLite:

  1. Aplicaciones de PequeΓ±a Escala: SQLite es ideal para aplicaciones con volΓΊmenes moderados de datos y poca concurrencia, como aplicaciones mΓ³viles, pequeΓ±as aplicaciones web o prototipos.

  2. Aplicaciones Sin Servidor: SQLite es una excelente opciΓ³n para aplicaciones sin una infraestructura de servidor, ya que su ligereza y capacidad de almacenar la base de datos en un ΓΊnico archivo la hacen fΓ‘cil de distribuir y utilizar en diferentes entornos.

  3. Proyectos Individuales o de Desarrollo: En el desarrollo de proyectos individuales o de prueba, donde la simplicidad y facilidad de integraciΓ³n son esenciales, SQLite ofrece una soluciΓ³n rΓ‘pida y eficiente.

CuΓ‘ndo No Usar SQLite:

  1. Aplicaciones Escalables: Si se espera un crecimiento significativo en la cantidad de datos o se requiere acceso concurrente a gran escala, otras bases de datos mΓ‘s robustas como MySQL o PostgreSQL son mΓ‘s apropiadas para garantizar un rendimiento Γ³ptimo.

  2. Aplicaciones con Altas Demandas de Escritura Concurrente: Si la aplicaciΓ³n necesita un alto rendimiento en escritura y acceso concurrente para mΓΊltiples usuarios, es mejor considerar bases de datos diseΓ±adas especΓ­ficamente para esta situaciΓ³n.

Como guarda la informacion?

SQLite viene con Python, por lo que no necesita instalar nada para usarlo en tus proyectos Scrapy. Tan solo, instalar e importar sqlite3 a nuestro archivo pipelines.py.

Abiri o crea la base de datos

Dentro del mΓ©todo open_spider, configuraremos el pipeline para hacer lo siguiente cada vez que una spider active el pipeline:

  • Intenta conectarse a la base de datos demo.db, si no existe la crea.

  • Cree un cursor que usaremos para ejecutar comandos SQL en la base de datos.

  • Cree una nueva tabla de quotes con las columnas text, tags y author, si aΓΊn no existe una en la base de datos.

# pipelines.py

import sqlite3

class SqliteDemoPipeline:

    def open_spider(self, spider):

        ## Create/Connect to database
        self.connection = sqlite3.connect('demo.db')

        ## Create cursor, used to execute commands
        self.cur = self.con.cursor()
        
        ## Create quotes table if none exists
        self.cur.execute("""
        CREATE TABLE IF NOT EXISTS quotes(
            text TEXT,
            tags TEXT,
            author TEXT
        )
        """)
        self.connection.commit()
        
    def close_spider(self, spider):
        self.client.close()

Guardar los datos

A continuaciΓ³n, vamos a utilizar el evento process_item dentro de nuestro pipeline para almacenar los datos que recopilamos en nuestra base de datos SQLite.

El process_item se activarΓ‘ cada vez que nuestra spider extraiga un elemento, por lo que debemos configurar el mΓ©todo process_item para insertar los datos de los elementos en la base de datos.

# pipelines.py

import sqlite3

class SqliteDemoPipeline:

    def __init__(self):
        # Crear o abrir la base de datos
        # ...

    def process_item(self, item, spider):

        ## Define insert statement
        self.cur.execute("""
            INSERT INTO quotes (text, tags, author) VALUES (?, ?, ?)
        """,
        (
            item['text'],
            str(item['tags']),
            item['author']
        ))

        ## Execute insert of data into database
        self.connection.commit()
        return item

En el caso de que queira evitar elementos repetido en tu base de datos puede usar el sigueinte metodo process_item:

    def process_item(self, item, spider):

        ## Check to see if text is already in database 
        self.cur.execute("select * from quotes where text = ?", (item['text'],))
        result = self.cur.fetchone()

        ## If it is in DB, create log message
        if result:
            spider.logger.warn("Item already in database: %s" % item['text'])
        
        ## If text isn't in the DB, insert data
        else:

            ## Define insert statement
            self.cur.execute("""
                INSERT INTO quotes (text, tags, author) VALUES (?, ?, ?)
            """,
            (
                item['text'],
                str(item['tags']),
                item['author']
            ))

            ## Execute insert of data into database
            self.con.commit()
        
        return item

Last updated