Python

Introducción a SQLite 3 en Python

Las bases de datos son una parte clave de los programas que necesitan persistir información. Para pequeñas aplicaciones, donde solo se guardan unos pocos registros, recurrir a una gran base de datos relacional como pueden ser PostgreSQL, MariaDB o SQL Server no es una buena opción debido que pueden ser difíciles de configurar. En estos casos una mejor opción es un sistema ligero como puede ser SQLite. Un sistema de gestión de bases de datos relacional que se implementa como una biblioteca C, por lo que es una solución ligera, autónoma e independiente de servidores. Por lo que toda la base de datos SQLite se almacena en un solo archivo, lo que lo hace perfecto en aplicaciones donde se requiere una solución de base de datos local. En esta publicación se explicará cómo utilizar SQLite 3 en Python para crear, conectar, y manipular bases de datos.

¿Por qué usar SQLite 3 en Python?

Antes de ver en detalle cómo utilizar SQLite 3 en Python es importante comprender por qué esta es una solución ideal para múltiples aplicaciones. Algunas razones por las que SQLite es una excelente opción para bases de datos integradas en aplicaciones Python son las siguientes:

  1. Ligera y sin configuración: SQLite es una biblioteca de bases de datos embebida que no requiere un servidor de base de datos independiente. Todo el sistema de gestión de bases de datos está contenido en una sola biblioteca, lo que lo hace extremadamente liviano y fácil de usar.
  2. Sin necesidad de configuración: No hay necesidad de configurar un servidor de base de datos, lo que simplifica la implementación y el mantenimiento de la aplicación.
  3. Transacciones ACID: SQLite garantiza la integridad de los datos mediante el soporte de transacciones ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad), lo que garantiza la fiabilidad de las operaciones de la base de datos incluso en entornos concurrentes.
  4. Amplia compatibilidad: SQLite es compatible con la mayoría de los sistemas operativos y plataformas, incluidos Windows, macOS y Linux, lo que lo hace ideal para aplicaciones multiplataforma, como son los scripts de Python.
  5. Eficiencia motor de base de datos: A pesar de ser una aplicación liviana, SQLite ofrece un rendimiento excepcional para muchas cargas de trabajo típicas de aplicaciones, gracias a su eficiente motor de base de datos.

Verificar la instalación de SQLite 3 en Python

La biblioteca para poder trabajar con SQLite 3 en Python es sqlite3, un módulo que forma parte de la biblioteca estándar, por ya se encuentra incluido en las distribuciones y no es necesario instalar. Para verificar la versión que se incluye en el entorno de Python, se puede importar y comprobar la versión con un código como el siguiente.

import sqlite3; 

print(sqlite3.version)
2.6.0

Al ejecutarse el código se deberá obtener el número de versión de la biblioteca sqlite3, como en el ejemplo donde se obtiene que la versión es 2.6.0 (nótese que posiblemente obtenga un número de versión mayor al ejecutar el código en su instalación).

Conexión a la base de datos SQLite 3 en Python

El primer paso para trabajar con SQLite 3 en Python es establecer una conexión con la base de datos. Lo que se puede hacer fácilmente con el método connect() de sqlite3 indicando la ruta al archivo que contiene la base de datos, por defecto, si este archivo no existe se creará uno.

import sqlite3

# Nombre del archivo de la base de datos SQLite
db_file = 'mi_base_de_datos.db'

# Establecer una conexión a la base de datos
conn = sqlite3.connect(db_file)

# Crear un cursor para ejecutar consultas SQL
cursor = conn.cursor()

En este ejemplo, primero se importa el módulo sqlite3. Posteriormente se especifica el nombre del archivo de la base de datos SQLite en la variable db_file. Después, mediante la función connect() de sqlite3 se establece una conexión con el archivo de base de datos. Finalmente, se crea un cursor utilizando el método cursor() de la conexión, necesario para poder ejecutar consultas SQL en la base de datos.

Es importante recordar cerrar la conexión a la base de datos cuando se termine de trabajar con ella, para liberar de esta manera los recursos del sistema. Esto se puede hacer llamando al método close() en el objeto de conexión.

Creación de una tabla básica en SQLite 3 en Python

Una vez establecida la conexión a la base de datos SQLite 3 en Python, el siguiente paso es crear una tabla en la base de datos. Las tablas son estructuras fundamentales en una base de datos relacional y se utilizan para organizar y almacenar datos de manera ordenada. En SQLite se pueden crear tablas utilizando los comandos estándar de SQL. Por ejemplo, el siguiente código se crea una tabla usuarios que contiene una id (valor entero y clave primaria), un nombre de usuario (cadena de texto) y su edad (valor entero).

# Definir la sentencia SQL para crear una tabla
create_table_sql = '''
CREATE TABLE IF NOT EXISTS usuarios (
    id INTEGER PRIMARY KEY,
    nombre TEXT NOT NULL,
    edad INTEGER
)
'''

# Ejecutar la sentencia SQL para crear la tabla
cursor.execute(create_table_sql)

# Confirmar los cambios
conn.commit()

En este código, una vez definida la consulta SQL que crea la tabla se usa el método execute() del cursor para ejecutar la sentencia. La cláusula IF NOT EXISTS asegura que la tabla solo se cree si aún no existe en la base de datos. Una vez ejecutada la sentencia SQL, se llama al método commit() de la conexión para confirmar los cambios y hacerlos permanentes en la base de datos.

Una vez creada la tabla se puede listar todas ejecutando la consulta "SELECT name FROM sqlite_master WHERE type='table';" como se muestra en el siguiente ejemplo.

# Consulta para obtener los nombres de todas las tablas en la base de datos
consulta_tablas = "SELECT name FROM sqlite_master WHERE type='table';"

# Ejecutar la consulta
cursor.execute(consulta_tablas)

# Obtener los resultados de la consulta
tablas = cursor.fetchall()

# Mostrar los nombres de las tablas
print("Las tablas en la base de datos son:")
for tabla in tablas:
    print(tabla[0])
Las tablas en la base de datos son:
usuarios

Lo que confirma que la tabla se ha creado correctamente.

Agregar datos a la tabla

Después de crear una tabla en la base de datos SQLite, el siguiente paso será agregar nuevos datos a esta tabla. Esto se puede hacer utilizando sentencias SQL INSERT, que permiten insertar nuevos registros en la tabla. Un ejemplo de cómo insertar valores en la tabla usuarios se muestra a continuación.

# Definir una lista de usuarios para agregar a la tabla
usuarios = [
    ('Alice', 30),
    ('Bob', 25),
    ('Charlie', 35)
]

# Definir la sentencia SQL para insertar datos en la tabla
insert_sql = 'INSERT INTO usuarios (nombre, edad) VALUES (?, ?)'

# Ejecutar la sentencia SQL para insertar datos en la tabla
cursor.executemany(insert_sql, usuarios)

# Confirmar los cambios
conn.commit()

En este ejemplo, se ha definido una lista de tuplas llamada usuarios, donde cada tupla contiene el nombre y la edad de un usuario. Luego, se ha definido una sentencia SQL INSERT que especifica las columnas en las que se desea insertar los datos usando parámetros de marcador de posición (?) para indicar dónde deben ir los valores.

A diferencia de la sección anterior, en esta ocasión se debe usar el método executemany() del cursor con la lista de usuarios como argumento para operar sobre todos. Esto inserta todos los usuarios de la lista en la tabla de usuarios de la base de datos. Al igual que cuando se creó la tabla, se llama al método commit() para confirmar los cambios.

Para comprobar que los datos se han agregado correctamente se puede ejecutar una consulta que muestre todo el contenido de la tabla. Lo que se puede ver en el siguiente código.

# Consulta para seleccionar todos los registros de la tabla especificada
consulta_contenido = "SELECT * FROM usuarios;"

# Ejecutar la consulta
cursor.execute(consulta_contenido)

# Obtener los resultados de la consulta
registros = cursor.fetchall()

# Mostrar los resultados
print("Contenido de la tabla usuarios:")
for registro in registros:
    print(registro)
Contenido de la tabla usuarios:
(1, 'Alice', 30)
(2, 'Bob', 25)
(3, 'Charlie', 35)

Obteniendo como respuesta la lista de usuarios con el id que ha agregado SQLite a cada uno de los registros.

Modificación de datos en la tabla

Después de agregar datos a la tabla es posible que sea necesario actualizar o modificar esos en algún momento. En SQLite, esto se puede hacer con las sentencias SQL UPDATE. Por ejemplo, se puede cambiar la edad de Bob con el siguiente código.

# Definir la nueva edad para el usuario con nombre 'Bob'
nueva_edad = 28

# Definir la sentencia SQL para actualizar datos en la tabla
update_sql = 'UPDATE usuarios SET edad = ? WHERE nombre = ?'

# Ejecutar la sentencia SQL para actualizar datos en la tabla
cursor.execute(update_sql, (nueva_edad, 'Bob'))

# Confirmar los cambios
conn.commit()

En este ejemplo se ha definido una nueva variable nueva_edad que contiene la nueva edad que se le desea asignar a Bob. Posteriormente se crea una sentencia SQL UPDATE que actualiza la columna edad en la tabla de usuarios para el usuario con nombre Bob. Al igual que antes se emplea un marcador de posición (?) en la sentencia SQL para indicar el valor de la nueva edad. Finalmente, se llama a los métodos execute() y commit() para actualizar y confirmar los cambios.

Se puede volver a obtener la tabla de la base de datos para comprobar que los datos se han cambiado correctamente.

# Consulta para seleccionar todos los registros de la tabla especificada
consulta_contenido = "SELECT * FROM usuarios;"

# Ejecutar la consulta
cursor.execute(consulta_contenido)

# Obtener los resultados de la consulta
registros = cursor.fetchall()

# Mostrar los resultados
print("Contenido de la tabla usuarios:")
for registro in registros:
    print(registro)
Contenido de la tabla usuarios:
(1, 'Alice', 30)
(2, 'Bob', 28)
(3, 'Charlie', 35)

Lo que muestra que el registro se ha modificado correctamente.

Eliminación de datos en la tabla

Con el tiempo, también puede ser necesario eliminar datos de una tabla, lo que se puede hacer utilizando sentencias SQL DELETE. Como ejemplo, se puede ver el siguiente código como se puede eliminar los registros del usuario Charlie.

# Definir el nombre del usuario que queremos eliminar
nombre_usuario = 'Charlie'

# Definir la sentencia SQL para eliminar datos de la tabla
delete_sql = 'DELETE FROM usuarios WHERE nombre = ?'

# Ejecutar la sentencia SQL para eliminar datos de la tabla
cursor.execute(delete_sql, (nombre_usuario,))

# Confirmar los cambios
conn.commit()

Al igual que a la hora de modificar los registros, en este ejemplo, se ha definido una variable nombre_usuario que contiene el nombre del usuario que se desea eliminar de la tabla de usuarios. Posteriormente se crea la sentencia SQL para eliminar el registro. Al igual que en las sentencias SQL UPDATE se emplea un marcador de posición (?) para indicar el valor del nombre de usuario. Finalmente, se llama a los métodos execute() y commit() para actualizar y confirmar los cambios.

Para confirmar el borrado se puede volver a obtener la tabla completa de la base.

# Consulta para seleccionar todos los registros de la tabla especificada
consulta_contenido = "SELECT * FROM usuarios;"

# Ejecutar la consulta
cursor.execute(consulta_contenido)

# Obtener los resultados de la consulta
registros = cursor.fetchall()

# Mostrar los resultados
print("Contenido de la tabla usuarios:")
for registro in registros:
    print(registro)
Contenido de la tabla usuarios:
(1, 'Alice', 30)
(2, 'Bob', 28)

Obteniendo solamente dos registros, ya que la entrada de Charlie se ha eliminado.

Conclusiones

En esta entrada se han visto los fundamentos de la biblioteca sqlite3 para usar SQLite 3 en Python. Una base de datos de gran popularidad para múltiples aplicaciones que solamente necesitan una pequeña, pero potente, base de datos local con la que trabajar. Evitando la necesidad de configurar un gestor de base de datos más complejo.

Imagen de Pexels en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Cómo calcular el tamaño de la muestra para encuestas

Calcular adecuadamente el tamaño de la muestra es una parte esencial en el diseño de…

1 día ago

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

Hoy en día, cuando pensamos en ciencia de datos, lo primero que nos viene a…

6 días ago

Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM

Ampliar el espacio de almacenamiento en un sistema Linux es una tarea habitual y crítica…

1 semana ago

Nuevo video: cómo activar copiar y pegar en VirtualBox fácilmente

¿Sabías que puedes copiar y pegar texto, archivos o imágenes entre tu sistema operativo principal…

2 semanas ago

Nuevo video: Leer y guardar archivos Excel y CSV en Python

Hoy publicamos un nuevo video en el canal de YouTube de Analytics Lane basado en…

2 semanas ago

Nuevo video en YouTube: Trabajando con archivos JSON en Python

En el canal de YouTube de Analytics Lane hemos publicado un nuevo video donde explicamos…

3 semanas ago

This website uses cookies.