• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

SQLite en Python

enero 18, 2021 Por Daniel Rodríguez 6 comentarios
Tiempo de lectura: 5 minutos

En el caso de que necesitemos una base de datos SQL para guardar datos en nuestra aplicación podemos recurrir a SQLite. Una base de datos ligera que se puede utilizar sin la necesidad de descargar, instalar y configurar ningún software. Solamente es necesario importar el paquete sqlite3, incluido en la instalación de Python. Así que veamos la forma de trabajar con SQLite en Python.

Tabla de contenidos

  • 1 Conexión a una base de datos SQLite
  • 2 Ejecutar una consulta en la base de datos
  • 3 Creación de una tabla
  • 4 Creación de una clase para tratar con SQLite en Python
    • 4.1 El constructor de la clase
    • 4.2 El método __table_exists
    • 4.3 Insertar un cliente
    • 4.4 Obtención de los clientes
    • 4.5 Borrado y actualización de los datos.
  • 5 Ejemplo de uso de SQLite en Python
  • 6 Conclusiones

Conexión a una base de datos SQLite

Las bases de datos de SQLite son archivos. Así para conectar a una base de datos solamente es necesario indicar la ruta a este. Para los que se debe utilizar el método sqlite3.connect(). En el caso de que el archivo indicado exista y sea una base de datos válida se conectará a ésta, en caso contrario, si es posible, creará el archivo y se conectará. Devolviendo el método una conexión.

Una vez realizada la conexión es necesario obtener un cursor para poder trabajar. Cursor que se puede obtener mediante el método de la conexión cursor(). Así para indicar la conexión a una base de datos solamente se debe ejecutar los siguientes comandos.

import sqlite3

conn = sqlite3.connect('database.db')
cursor = conn.cursor()

Obteniendo como resultado una conexión en conn y un cursor el cursor.

Ejecutar una consulta en la base de datos

Ahora que tenemos la conexión se puede ejecutar diferentes consultas en la base de datos. Para lo que se utiliza el método execute() del cursor. Por ejemplo, conocer la lista de tablas en la base de datos solamente es necesario ejecutar

Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane

import sqlite3

conn = sqlite3.connect('database.db')
cursor = conn.cursor()

cursor.execute('SELECT name FROM sqlite_master')

for row in cursor.fetchall(): 
    print(row)

En SQLite la tabla sqlite_master contiene el listado de las tablas que existen en la base de datos con sus propiedades. Siendo name el nombre de la columna. Una vez lanzada la consulta SQL solamente deberíamos iterar sobre las respuestas utilizando el método del cursor fetchall(). Lo que devolverá cada una de las columnas.

Si la base de datos es nueva, como es el caso, el código no devolverá ningún registro debido a que no existe ninguna tabla.

Publicidad


Creación de una tabla

Para crear una tabla en la base de datos se tienen que ejecutar un comando de creación de tabla. Básicamente CREATE TABLE. Por ejemplo, para crear una tabla de clientes con nombre, apellidos, género, dirección IP y un identificador autonumérico solamente se tiene que ejecutar la siguiente consulta.

cursor.execute('''
    CREATE TABLE IF NOT EXISTS clients (
        id integer PRIMARY KEY NOT NULL,
        first_name TEXT,
        last_name TEXT,
        gender TEXT,
        ip_address TEXT);''')

Creación de una clase para tratar con SQLite en Python

El proceso de lectura, creación, actualización y borrado de registros en una base de datos de clientes se puede incluir en una clase de Python. Lo que se muestra en el siguiente código.

import sqlite3


class Database:
    def __init__(self, database):
        self.__conn = sqlite3.connect(database)
        self.__cursor = self.__conn.cursor()
    
        if not self.__table_exists('clients'):
            self.__cursor.execute('''
                CREATE TABLE IF NOT EXISTS clients (
                    id integer PRIMARY KEY NOT NULL,
                    first_name TEXT,
                    last_name TEXT,
                    gender TEXT,
                    ip_address TEXT);''')
    
    
    def __table_exists(self, table):
        self.__cursor.execute('''SELECT count(name) FROM sqlite_master WHERE TYPE = 'table' AND name = '{}';'''.format(table)) 
        if self.__cursor.fetchone()[0] == 1:
            return True 
        else:
            return False
        

    def __read_cursor(self):
        data = []
        
        for row in self.__cursor.fetchall(): 
            data.append(row) 
            
        return data
        
        
    def insert_client(self, first_name, last_name, gender, ip_address):
        self.__cursor.execute('''INSERT INTO clients (first_name, last_name, gender, ip_address) VALUES(?, ?, ?, ?);''',
                               (first_name, last_name, gender, ip_address))
        self.__conn.commit()
        
        
    def get_clients(self):
        self.__cursor.execute('SELECT * FROM clients')
        return self.__read_cursor()
    
    
    def get_client(self, client_id):
        self.__cursor.execute('SELECT * FROM clients WHERE id = {};'.format(client_id))
        return self.__read_cursor()
    
    
    def delete_client(self, client_id):
        self.__cursor.execute('DELETE FROM clients WHERE id = {};'.format(client_id))
        self.__conn.commit()
        
        
    def update_client_ip(self, client_id, ip_address):
        self.__cursor.execute('''UPDATE clients SET ip_address = '{}' WHERE id = {};'''.format(ip_address, client_id))
        self.__conn.commit()

A continuación, se puede ver los diferentes componentes de esta clase.

El constructor de la clase

En primer lugar, se puede ver el constructor de la clase que contiene la creación de la conexión y un cursor. Así como la creación de la tabla si no existe. Lo que se verifica con el método __table_exists.

Publicidad


El método __table_exists

En este método privado se consulta si el nombre de la tabla indicada existe en la base de datos. Lo que, como se ha visto anteriormente, es posible comprobar en la tabla sqlite_master. Si la consulta devuelve un valor la tabla existe, en caso contrario no.

Insertar un cliente

Para la inserción de un cliente se ha creado el método insert_client(). Al que debemos pasar todos los parámetros de la tabla. Dentro del método se incluye una consulta de inserción y, después de lanzar esta, un commit para asegurar que los datos se incluyen en la base de datos.

Obtención de los clientes

Se han creado dos método para obtener todos los clientes, get_clients(), y un único cliente, get_client(). La única diferencia entre los dos es la consulta que se hace para obtener uno o varios clientes. En ambos casos, una vez realizada la consulta se llama al método privado __read_cursor(). Método con el que se guardan los registros obtenidos en la última consulta en una lista.

Publicidad


Borrado y actualización de los datos.

Finalmente tenemos dos método para borrar, delete_client(), y actualizar , update_client_ip(), los datos de un registros. En ambos casos usando el id para identificar el registro a alterar. En este caso lo único importante una vez lanzada la consulta es usar el método commit() de la conexión para asegurarnos que los cambios se aplican.

Ejemplo de uso de SQLite en Python

Ahora que se ha creado la clase se pueden probar los diferentes métodos para comprobar el funcionamiento del código. En primer lugar, se pueden crear registros y comprobar que estos son los que se obtienen al pedir el listado de clientes.

db = Database('clients.db')

db.insert_client('Damita', 'Suett', 'Female', '223.103.33.64')
db.insert_client('Dorie', 'Befroy', 'Female', '236.0.133.20')
db.insert_client('Marlo', 'Roughley', 'Male', '124.10.252.163')
db.insert_client('Cleveland', 'Bentick', 'Male', '26.35.192.36')
db.insert_client('Sofie', 'Eannetta', 'Female', '55.15.100.224')

db.get_clients()
[(1, 'Damita', 'Suett', 'Female', '223.103.33.64'),
 (2, 'Dorie', 'Befroy', 'Female', '236.0.133.20'),
 (3, 'Marlo', 'Roughley', 'Male', '124.10.252.163'),
 (4, 'Cleveland', 'Bentick', 'Male', '26.35.192.36'),
 (5, 'Sofie', 'Eannetta', 'Female', '55.15.100.224')]

Una vez hecho esto se puede comprobar los valores de un cliente en concreto, para lo que se usa el método get_client.

db.get_client(1)
[(1, 'Damita', 'Suett', 'Female', '223.103.33.64')]

Finalmente, comprobaremos los métodos para borrar un registro y modificar otro. Viendo que los valores finales son los esperados.

db.delete_client(1)
db.update_client_ip(2, '197.149.84.113')
db.get_clients()
[(2, 'Dorie', 'Befroy', 'Female', '197.149.84.113'),
 (3, 'Marlo', 'Roughley', 'Male', '124.10.252.163'),
 (4, 'Cleveland', 'Bentick', 'Male', '26.35.192.36'),
 (5, 'Sofie', 'Eannetta', 'Female', '55.15.100.224')]

Conclusiones

En esta ocasión hemos visto cómo trabajar con SQLite en Python a través de la librería sqlite3. Librería que ya está incluida por defecto en las versiones actuales de Python. Gracias a lo que podemos disponer de una base de datos para persistir información en nuestros programas, sin necesitar para ello instalar y configurar un motor de bases de datos. Además, al trabajar con archivos, es más fácil trabajar con varias bases de datos y mover los datos entre diferentes ordenadores.

SQLite es una base de datos muy popular para persistir los datos localmente, por eso ya hemos visto ejemplo de su tanto en RapidMiner como en R.

Imagen de FreePhotosART en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 5 / 5. Votos emitidos: 2

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Calculadora de Contrastes de Hipótesis: interpreta correctamente el p-valor y toma decisiones estadísticas con confianza
  • Calculadora de Tamaño del Efecto: la herramienta clave para entender cuánto importa realmente una diferencia
  • Simulador de DBSCAN: descubre cómo encontrar clusters reales (y ruido) sin fijar K
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

Publicado en: Python Etiquetado como: Bases de datos

Interacciones con los lectores

Comentarios

  1. salle dice

    mayo 17, 2022 a las 4:21 pm

    Hola, estoy intentando aprender de esto, tengo algo como:
    class conexion():
    def __init__(self, nombre):
    self.nombre = nombre
    self.conexion = sqlite3.connect(nombre)
    def creartablar(self, nombre):
    self.nombre = nombre
    self.cursor = self.conexion.cursor(nombre)
    if not self.table_exist(‘clientes’):
    self.cursor.execute()

    Por el momento voy por ahí pero en el curso que estoy dando no dan lo de que incluyes doble guion bajo en los métodos, eso a que se debe? saludos y gracias.

    Responder
    • Daniel Rodríguez dice

      mayo 17, 2022 a las 6:06 pm

      Los métodos que comienzan y terminan por __ son métodos especiales de las clases de Python. Por ejemplo, __init__ es el constructor.

      Responder
  2. salle dice

    mayo 17, 2022 a las 7:52 pm

    Muchas gracias por tu respuesta Daniel.
    Entonces que diferencia existe entre poner por ejemplo:
    self.__cursor.execute() o self.curso.execute()

    Responder
    • Daniel Rodríguez dice

      mayo 18, 2022 a las 9:16 am

      El guion bajo delante del nombre de las funciones se utiliza para indicar a otros programadores que estas son privadas o protegidas, aunque ambas funcionaran igual.

      Responder
      • salle dice

        mayo 18, 2022 a las 8:02 pm

        Mil Gracias, quería preguntarte si puedo contactarte de alguna otra forma, de forma de tener un contacto más directo, para preguntarte no sobre esto, sino la posibilidad de ayudarme a aprender más sobre programación en python de manera remunerada, si fuera posible claro, ya me dices algo, saludos y gracias!

        Responder
        • Daniel Rodríguez dice

          mayo 18, 2022 a las 8:42 pm

          Existe un formulario de contacto en https://www.analyticslane.com/contacto/

          Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

De la Regresión Logística al Scorecard: La Transformación Matemática

mayo 19, 2026 Por Daniel Rodríguez

Noticias

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

mayo 18, 2026 Por Daniel Rodríguez

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

mayo 14, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Gráficos de correlación en Seaborn: Mapas de calor y gráficos de pares publicado el julio 27, 2023 | en Python
  • Números calientes en Bonoloto: mismos resultados que el azar publicado el octubre 9, 2020 | en Opinión
  • Segmentar datos numéricos en Pandas con la función cut() publicado el noviembre 6, 2023 | en Python
  • Media, mediana y moda: Descubre cómo interpretar las medidas de tendencia central con ejemplos claros y sin complicaciones publicado el mayo 16, 2025 | en Ciencia de datos
  • Selección del valor óptimo de K en SelecKBest de scikit-learn publicado el febrero 23, 2024 | en Ciencia de datos

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.1 (11)

Aplicar el método D’Hondt en Excel

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto