Gestión de Bases de Datos SQLite con Python

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:

  1. Importar el módulo sqlite3.
  2. Establecer una conexión a la base de datos (se creará un archivo si no existe).
  3. Crear un objeto cursor para ejecutar comandos SQL.
  4. Ejecutar sentencias SQL utilizando el cursor.
  5. Confirmar (commit) los cambios si son necesarios (para operaciones de escritura).
  6. 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. Retorna None si 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.

Etiquetas: Python SQLite SQLite3 base de datos embebida SQL

Publicado el 6-29 04:06