SQLite es un sistema de gestión de bases de datos relacionales (RDBMS) ligero y autocontenido, conocido por su naturaleza embebida. A diferencia de los sistemas cliente-servidor tradicionales, SQLite se integra directamente en la aplicación, almacenando la base de datos completa en un único archivo. Cumple con las propiedades ACID y soporta la mayoría de los estándares SQL, aunque con una sintaxis SQL dinámica y de tipo débil. Su eficiencia y simplicidad lo convierten en una opción popular para el almacenamiento de datos local en aplicaciones, como navegadores web.
Interacción con SQLite desde Python
Python facilita la interacción con bases de datos SQLite a través de su módulo incorporado sqlite3. Los pasos ganerales para trabajar con una base de datos SQLite son:
- Importar el módulo
sqlite3. - Establecer una conexión a la base de datos (se creará un archivo si no existe).
- Crear un objeto cursor para ejecutar comandos SQL.
- Ejecutar sentencias SQL utilizando el cursor.
- Confirmar (
commit) los cambios si son necesarios (para operaciones de escritura). - Cerrar el cursor y la conexión para liberar recursos.
Creación de una Tabla
Para definir la estructura de una tabla, se utiliza una sentencia CREATE TABLE. A continuación, se muestra un ejemplo para crear una tabla usuarios:
import sqlite3
# Conectar a la base de datos (se creará 'mi_base.db' si no existe)
conexion = sqlite3.connect('mi_base.db')
cursor = conexion.cursor()
# Sentencia SQL para crear la tabla 'usuarios'
sql_crear_tabla = '''
CREATE TABLE IF NOT EXISTS usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT NOT NULL,
edad INTEGER NOT NULL
);
'''
try:
cursor.execute(sql_crear_tabla)
print("Tabla 'usuarios' creada exitosamente.")
except sqlite3.Error as e:
print(f"Error al crear la tabla: {e}")
finally:
# Cerrar el cursor y la conexión
cursor.close()
conexion.close()
Inserción de Datos
Los datos se insertan en una tabla mediente sentencias INSERT. Es recomendable utilizar parámetros para prevenir la inyección SQL.
import sqlite3
conexion = sqlite3.connect('mi_base.db')
cursor = conexion.cursor()
# Sentencia SQL para insertar datos con placeholders
sql_insertar = 'INSERT INTO usuarios (nombre, edad) VALUES (?, ?)'
datos_usuario = ('Alice', 30)
try:
cursor.execute(sql_insertar, datos_usuario)
conexion.commit() # Guardar los cambios
print("Usuario insertado correctamente.")
except sqlite3.Error as e:
print(f"Error al insertar datos: {e}")
conexion.rollback() # Deshacer cambios en caso de error
finally:
cursor.close()
conexion.close()
Consulta de Datos
Para recuperar información de la base de datos, se emplean sentencias SELECT. Los métodos fetchone(), fetchmany() y fetchall() se utilizan para obtener los resultados.
import sqlite3
conexion = sqlite3.connect('mi_base.db')
cursor = conexion.cursor()
# Sentencia SQL para seleccionar todos los usuarios
sql_seleccionar = 'SELECT id, nombre, edad FROM usuarios'
try:
cursor.execute(sql_seleccionar)
# Recuperar una sola fila
primer_usuario = cursor.fetchone()
print("Primer usuario encontrado:", primer_usuario)
# Recuperar múltiples filas (ej. las siguientes 5)
# algunos_usuarios = cursor.fetchmany(5)
# print("Algunos usuarios:", algunos_usuarios)
# Recuperar todas las filas restantes
todos_los_usuarios = cursor.fetchall()
print("Todos los usuarios:", todos_los_usuarios)
except sqlite3.Error as e:
print(f"Error al consultar datos: {e}")
finally:
cursor.close()
conexion.close()
API Clave del Módulo sqlite3
sqlite3.connect(database_file): Establece una conexión con el archivo de la base de datos SQLite.connection.cursor(): Devuelve un objeto cursor para interactuar con la base de datos.cursor.execute(sql_query, [parameters]): Ejecuta una única sentencia SQL. Los parámetros se pasan como una tupla o lista para prevanir inyección SQL.cursor.executemany(sql_query, list_of_parameters): Ejecuta la misma sentencia SQL múltiples veces con diferentes conjuntos de parámetros.cursor.executescript(sql_script): Ejecuta un script SQL que puede contener múltiples sentencias separadas por punto y coma.connection.commit(): Guarda los cambios realizados en la base de datos.connection.rollback(): Revierte los cambios no confirmados.connection.close(): Cierra la conexión a la base de datos.cursor.fetchone(): Recupera la siguiente fila del conjunto de resultados. RetornaNonesi no hay más filas.cursor.fetchmany(size=cursor.arraysize): Recupera el número especificado de filas del conjunto de resultados.cursor.fetchall(): Recupera todas las filas restantes del conjunto de resultados como una lista.connection.total_changes(): Retorna el número total de filas modificadas, insertadas o eliminadas desde que se abrió la conexión.
Herramientas como DB Browser for SQLite o las funcionalidades integradas en IDEs como PyCharm permiten visualizar la estructura y los datos de las bases de datos SQLite.