Curso de programación en Python usando Linux. Decimoquinta parte
En el artículo anterior de nuestro curso de programación en Python usando Linux hablamos sobre la posibilidad de almacenar y recuperar datos utilizando texto plano. Esto puede ser útil si nuestras necesidades no van más allá. Sin embargo, para tareas más completas debemos interactuar con un sistema de gestión de bases de datos.
Un sistema de gestión de bases de datos utiliza motores de bases de datos y otras utilidades para facilitar la interacción con estas. Los motores de bases de datos se ocupan de registrar, almacenar, recuperar, modificar y eliminar los elementos de una base de datos. Pero ¿qué es una base de datos?
Advierto desde ya que este es un artículo puramente teórico por lo que si tienes conocimientos sobre base de datos te lo puedes saltear sin inconvenientes.
Curso de programación en Python usando Linux: uso de bases de datos
Llamamos base de datos a un conjunto de información que se puede almacenar de forma que facilite su acceso y modificación de manera eficiente. El uso de bases de datos permite superar las limitaciones de los archivos de texto plano, como:
- Opciones de búsqueda limitadas
- Acceso limitado.
- Escasa capacidad para controlar la integridad de los datos.
- Poca escalabilidad.
Usando bases de datos podemos:
- Trabajar con grandes volúmenes de datos.
- Establecer reglas y validaciones.
- Permitir el acceso a múltiples usuarios.
- Organizar mejor la información.
Aunque Python puede trabajar con los motores de bases de datos más populares, en este curso nos centraremos en SQLite porque su instalación no reviste complejidad alguna. La base de datos se almacena en un archivo dentro del proyecto, al que Python 3 accede utilizando una biblioteca integrada.
Tablas, registros y campos
Como otras bases de datos populares, SQLite organiza los datos en tablas. Una tabla es similar a la organización tradicional de una planilla de cálculo como Excel o LibreOffice Calc. Hay filas y columnas, aunque sin las letras y números indicadores. La estructura es algo parecido a esto:
NOMBRE ESCRITORIO DERIVADA DE
Ubuntu Gnome Debian
Manjaro KDE Arch Linux
inuxMnt Cinnamon Ubuntu
Características de la clave primaria
Vamos a hacer un agregado a la tabla anterior
| ID distro | Nombre | Derivada de | Escritorio |
|---|---|---|---|
| 1 | Ubuntu | Debian | GNOME |
| 2 | Manjaro | Arch Linux | KDE |
| 3 | Linux Mint | Ubuntu | Cinnamon |
La nueva primera columna, la de los números, es conocida como campo clave o clave primaria. Su función es asignar un identificador único a cada registro. Esto es útil, por ejemplo, si hubiéramos decidido agregar la versión de Linux Mint basada en el escritorio Mate, que no se diferencia por nombre de la versión con escritorio Cinnamon.
- Cada registro tiene su propia clave primaria, que es irrepetible.
- Es obligatoria: no puede haber registros sin clave primaria.
Continuando con la línea de los ejemplos anteriores, podemos asignar a nuestra lista de distribuciones Linux, origen y escritorio una clave primaria llamada ID Distro. En nuestro ejemplo, el campo ID Distro es, como dijimos, la clave primaria. Cada una de las tres distribuciones tiene un número único que la distingue de las otras. Esto sucede incluso si nos vemos obligados a repetir otros datos, como las distintas versiones de Manjaro o las de Linux Mint que usan el escritorio Mate o están basadas en Debian.
La obligación de utilizar una clave primaria única e irrepetible nos ahorra problemas a la hora de localizar cada elemento de la tabla.
Otra utilidad de las claves primarias es permitir encontrar rápidamente lo que buscamos. Al contar con un identificador único para cada registro, es posible hallar una respuesta sin tener que leer todos los campos relacionados con ese dato. De la misma forma, constituyen una salvaguarda para no modificar o eliminar el registro equivocado.
El módulo SQLite3
Habíamos explicado en artículos anteriores el concepto de módulo. Un módulo es un programa escrito en Python que realiza tareas que pueden resultar útiles para otros programas, evitando a sus desarrolladores la necesidad de escribir nuevamente el código que las realiza.
Los módulos suelen organizarse por funciones similares (matemática, inteligencia artificial, programación de juegos, etc.) en las llamadas bibliotecas (o, usando la traducción más difundida, librerías).
Dado que los módulos son una forma de organizar mejor el código y compartirlo con otros desarrolladores, constituyen el medio elegido por los creadores de Python para suministrar herramientas adicionales. Uno de los módulos incluidos para facilitar el trabajo con bases de datos es SQLite3.
El nombre del módulo proviene de SQLite, un sistema de gestión de bases de datos relacional que almacena toda la información en un único archivo. Su utilidad para aplicaciones domésticas o monousuario radica en que no requiere la intervención de un servidor externo. El programa interactúa directamente con el archivo. Esto hace que la base de datos sea más fácil de configurar, trasladar y compartir.
Las bases de datos relacionales son aquellas en las que los datos se almacenan en tablas que se relacionan entre sí.
Repito lo dicho unos párrafos atrás: el módulo SQLite3 es solo una de las herramientas disponibles. Para trabajar con otros tipos de bases de datos existen recursos adicionales que van más allá de los propósitos de esta serie de artículos.
La función del módulo es actuar como nexo entre el programa y la base de datos. Puede realizar tareas como:
- Crear una base de datos.
- Crear tablas dentro de una base de datos.
- Insertar registros.
- Modificar datos.
- Borrar datos.
- Realizar consultas SQL.
- Una consulta SQL es una instrucción que se le da a la base de datos utilizando un lenguaje especialmente desarrollado para esa finalidad.
Aunque no sea la mejor opción para proyectos que requieren acceso simultáneo de múltiples usuarios, como este blog o un portal de comercio electrónico, con el módulo SQLite3 sí podrás construir aplicaciones útiles para tareas como:
- Gestionar colecciones de libros, discos y videos.
- Aplicaciones de listas de tareas.
- Gestión de finanzas personales.
- Un anotador Markdown con etiquetas.
- Una wiki personal.
En el próximo artículo nos vamos a meter de lleno en la creación de bases de datos usando Python 3 y SQLite3. Sin embargo, como se trata de un curso introductorio, era necesaria una introducción teórica.

