SQLite3

 

¿Qué es SQLite3?

SQLite es una base de datos:

  • Integrada (no necesita servidor)

  • Muy rápida

  • Basada en un solo archivo .db

  • Perfecta para proyectos pequeños y medianos

Python incluye el módulo sqlite3 por defecto.

1. Crear una base de datos y conectarse

import sqlite3

conexion = sqlite3.connect("mi_base.db")
cursor = conexion.cursor()

Si el archivo no existe, se crea automáticamente.

2. Crear una tabla

cursor.execute("""
CREATE TABLE IF NOT EXISTS usuarios (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nombre TEXT,
    edad INTEGER,
    email TEXT
)
""")

conexion.commit()

3. Insertar datos

cursor.execute("INSERT INTO usuarios (nombre, edad, email) VALUES (?, ?, ?)",
               ("Ana", 22, "ana@mail.com"))

conexion.commit()

El uso de ? evita inyecciones SQL.

4. Insertar varios registros a la vez

datos = [
    ("Luis", 30, "luis@mail.com"),
    ("Marta", 25, "marta@mail.com")
]

cursor.executemany("INSERT INTO usuarios (nombre, edad, email) VALUES (?, ?, ?)", datos)
conexion.commit()

5. Consultar datos

Obtener todos los registros

cursor.execute("SELECT * FROM usuarios")
filas = cursor.fetchall()

for fila in filas:
    print(fila)

Obtener un solo registro

cursor.execute("SELECT * FROM usuarios WHERE id = ?", (1,))
print(cursor.fetchone())

6. Actualizar datos

cursor.execute("UPDATE usuarios SET edad = ? WHERE nombre = ?", (23, "Ana"))
conexion.commit()

7. Eliminar datos

cursor.execute("DELETE FROM usuarios WHERE id = ?", (2,))
conexion.commit()

8. Cerrar la conexión

conexion.close()

9. Convertir resultados en diccionarios (más cómodo)

conexion.row_factory = sqlite3.Row
cursor = conexion.cursor()

cursor.execute("SELECT * FROM usuarios")
fila = cursor.fetchone()

print(fila["nombre"])

10. Integración con Tkinter, bots, scraping…

SQLite es ideal para:

  • Guardar usuarios de una app Tkinter

  • Registrar logs de un bot

  • Guardar datos de scraping

  • Crear inventarios

  • Crear sistemas CRUD completos

ACTIVIDAD PRÁCTICA: “Gestor de usuarios con SQLite”

Objetivo: que tus alumnos creen un CRUD completo (Crear, Leer, Actualizar, Borrar).

Enunciado

Crea un programa que:

  1. Cree una base de datos usuarios.db

  2. Tenga una tabla usuarios con:

    • id

    • nombre

    • edad

    • email

  3. Permita mediante un menú:

    • Añadir usuario

    • Mostrar todos

    • Buscar por nombre

    • Actualizar email

    • Eliminar usuario

  4. Use funciones para cada operación

Solución propuesta

import sqlite3

conexion = sqlite3.connect("usuarios.db")
cursor = conexion.cursor()

cursor.execute("""
CREATE TABLE IF NOT EXISTS usuarios (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    nombre TEXT,
    edad INTEGER,
    email TEXT
)
""")
conexion.commit()

def añadir_usuario():
    nombre = input("Nombre: ")
    edad = int(input("Edad: "))
    email = input("Email: ")
    cursor.execute("INSERT INTO usuarios (nombre, edad, email) VALUES (?, ?, ?)",
                   (nombre, edad, email))
    conexion.commit()

def mostrar_usuarios():
    cursor.execute("SELECT * FROM usuarios")
    for fila in cursor.fetchall():
        print(fila)

def buscar_por_nombre():
    nombre = input("Nombre a buscar: ")
    cursor.execute("SELECT * FROM usuarios WHERE nombre = ?", (nombre,))
    print(cursor.fetchall())

def actualizar_email():
    nombre = input("Nombre del usuario: ")
    nuevo_email = input("Nuevo email: ")
    cursor.execute("UPDATE usuarios SET email = ? WHERE nombre = ?", (nuevo_email, nombre))
    conexion.commit()

def eliminar_usuario():
    nombre = input("Nombre del usuario a eliminar: ")
    cursor.execute("DELETE FROM usuarios WHERE nombre = ?", (nombre,))
    conexion.commit()

while True:
    print("\n--- MENÚ ---")
    print("1. Añadir usuario")
    print("2. Mostrar usuarios")
    print("3. Buscar por nombre")
    print("4. Actualizar email")
    print("5. Eliminar usuario")
    print("6. Salir")

    opcion = input("Opción: ")

    if opcion == "1":
        añadir_usuario()
    elif opcion == "2":
        mostrar_usuarios()
    elif opcion == "3":
        buscar_por_nombre()
    elif opcion == "4":
        actualizar_email()
    elif opcion == "5":
        eliminar_usuario()
    elif opcion == "6":
        break
    else:
        print("Opción no válida.")

conexion.close()

Resultado esperado

Un gestor de usuarios totalmente funcional, perfecto para:

  • Integrarlo con Tkinter

  • Añadir validaciones

  • Exportar a Excel o PDF

  • Usarlo como base de un proyecto final