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.
Tabla de contenidos
¿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:
- 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.
- 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.
- 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.
- 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.
- 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.
Deja una respuesta