¿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:
Cree una base de datos
usuarios.dbTenga una tabla
usuarioscon:id
nombre
edad
email
Permita mediante un menú:
Añadir usuario
Mostrar todos
Buscar por nombre
Actualizar email
Eliminar usuario
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