Introducción a SQLite y al módulo sqlite3
SQLite es un sistema de gestión de bases de datos relacionales compacto que no requiere instalar un servidor independiente y es ideal para desarrollar proyectos pequeños y medianos. En Python, el soporte para SQLite se implementa a través del módulo integrado sqlite3, lo que permite trabajar con bases de datos sin instalar librerías adicionales.
El módulo sqlite3 convierte la creación y el uso de bases de datos en un proceso similar a trabajar con archivos comunes. Esta solución es especialmente valiosa para prototipado, sistemas embebidos, aplicaciones de escritorio y fines educativos.
Instalación y compatibilidad
El módulo sqlite3 está incluido en la librería estándar de Python desde la versión 2.5 y está disponible sin instalación adicional. Ofrece compatibilidad total con los sistemas operativos Windows, macOS y Linux, proporcionando una interfaz para trabajar con SQLite versión 3.
import sqlite3
Conexión a la base de datos y creación de la conexión
Creación de una base de datos en archivo
conn = sqlite3.connect('mi_base_de_datos.db')
Al ejecutar este comando, la base de datos se crea automáticamente si el archivo especificado no existe.
Creación de una base de datos en memoria
conn = sqlite3.connect(':memory:')
Esta opción es especialmente útil para pruebas y operaciones temporales.
Parámetros adicionales de conexión
conn = sqlite3.connect('database.db',
check_same_thread=False,
detect_types=sqlite3.PARSE_DECLTYPES)
Creación de tablas y trabajo con el esquema de datos
Creación de tablas
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT NOT NULL,
edad INTEGER,
email TEXT UNIQUE,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
Tipos de datos en SQLite
SQLite admite cinco tipos de datos principales:
- INTEGER - números enteros
- REAL - números de punto flotante
- TEXT - cadenas de texto
- BLOB - datos binarios
- NULL - ausencia de valor
SQLite utiliza tipado dinámico, lo que ofrece flexibilidad, pero requiere atención al trabajar con los datos.
Operaciones CRUD (Crear, Leer, Actualizar, Eliminar)
Inserción de datos
# Inserción de un solo registro
cursor.execute("INSERT INTO usuarios (nombre, edad, email) VALUES (?, ?, ?)",
("Juan Pérez", 30, "juan@ejemplo.com"))
# Inserción de varios registros
datos_usuarios = [
("María García", 25, "maria@ejemplo.com"),
("Pedro López", 35, "pedro@ejemplo.com"),
("Ana Martínez", 28, "ana@ejemplo.com")
]
cursor.executemany("INSERT INTO usuarios (nombre, edad, email) VALUES (?, ?, ?)", datos_usuarios)
conn.commit()
Consulta de datos
# Consultar todos los registros
cursor.execute("SELECT * FROM usuarios")
todos_usuarios = cursor.fetchall()
# Consulta con condición
cursor.execute("SELECT nombre, edad FROM usuarios WHERE edad > ?", (25,))
usuarios_adultos = cursor.fetchall()
# Consulta con ordenamiento
cursor.execute("SELECT * FROM usuarios ORDER BY edad DESC")
usuarios_ordenados = cursor.fetchall()
Actualización de datos
cursor.execute("UPDATE usuarios SET edad = ? WHERE nombre = ?", (31, "Juan Pérez"))
conn.commit()
# Obtener el número de filas actualizadas
print(f"Filas actualizadas: {cursor.rowcount}")
Eliminación de datos
cursor.execute("DELETE FROM usuarios WHERE nombre = ?", ("Ana Martínez",))
conn.commit()
print(f"Filas eliminadas: {cursor.rowcount}")
También en la biblioteca
Rate Limiting en Java: bibliotecas y herramientas para el control de solicitudes (Bucket4j, Resilience4j)
Generación de PDF en Java con iText
Generación de PDF en Java: resumen de las bibliotecas iText, Apache PDFBox, OpenPDF
WebSocket en Node.js: biblioteca ws para tiempo real