Bases de datos sqlite
1. Qué es SQLite? #
SQLite es una biblioteca de software que proporciona un motor de bases de datos SQL ligero y autocontenido. A diferencia de otros sistemas de bases de datos como MySQL o PostgreSQL, SQLite no requiere un servidor independiente; los datos se almacenan en un archivo en tu disco. Esto lo hace ideal para aplicaciones pequeñas, prototipos o proyectos educativos.
2. Por qué usar SQLite en Python? #
- Fácil de usar: No necesitas instalar ni configurar un servidor de bases de datos.
- Ligero: Todo se almacena en un único archivo de base de datos.
- Integrado en Python: Python incluye soporte para SQLite de forma nativa a través del módulo
sqlite3.
3. Cómo usar SQLite en Python? #
Veamos cómo puedes crear, interactuar y manipular una base de datos SQLite en Python.
4. Paso 1: Conectar a una base de datos #
Primero, necesitas conectar tu programa a una base de datos SQLite. Si la base de datos no existe, se creará automáticamente.
1import sqlite3 2 3# Conectar a la base de datos (o crearla si no existe) 4conexion = sqlite3.connect("mi_base_de_datos.db") 5 6# Crear un cursor para interactuar con la base de datos 7cursor = conexion.cursor() 8 9print("Conexión a la base de datos establecida.")
- ¿Qué hace este código?:
- Conecta a una base de datos llamada
mi_base_de_datos.db. Si el archivo no existe, se crea. - Crea un cursor que se usa para ejecutar comandos SQL en la base de datos.
- Conecta a una base de datos llamada
- Resultado en pantalla:
Conexión a la base de datos establecida.
5. Paso 2: Crear una tabla #
Ahora que estás conectado, puedes crear una tabla en la base de datos.
1# Crear una tabla llamada "usuarios" 2cursor.execute(""" 3CREATE TABLE IF NOT EXISTS usuarios ( 4 id INTEGER PRIMARY KEY AUTOINCREMENT, 5 nombre TEXT NOT NULL, 6 edad INTEGER NOT NULL, 7 email TEXT UNIQUE NOT NULL 8) 9""") 10 11# Confirmar la creación de la tabla 12conexion.commit() 13 14print("Tabla 'usuarios' creada.")
- ¿Qué hace este código?:
- Crea una tabla llamada
usuarioscon columnas paraid,nombre,edadyemail. PRIMARY KEY AUTOINCREMENThace queidsea una clave primaria que se incrementa automáticamente.commit()guarda los cambios en la base de datos.
- Crea una tabla llamada
- Resultado en pantalla:
Tabla 'usuarios' creada.
6. Paso 3: Insertar datos en la tabla #
Una vez que la tabla está creada, puedes insertar datos en ella.
1# Insertar un nuevo usuario en la tabla 2cursor.execute(""" 3INSERT INTO usuarios (nombre, edad, email) 4VALUES ('Ana', 30, 'ana@example.com') 5""") 6 7# Confirmar la inserción de datos 8conexion.commit() 9 10print("Datos insertados en la tabla 'usuarios'.")
- ¿Qué hace este código?:
- Inserta un nuevo registro en la tabla
usuarioscon los valores especificados. commit()guarda los cambios en la base de datos.
- Inserta un nuevo registro en la tabla
- Resultado en pantalla:
Datos insertados en la tabla 'usuarios'.
7. Paso 4: Consultar datos #
Puedes recuperar datos de la base de datos usando una consulta SQL.
1# Consultar todos los usuarios de la tabla 2cursor.execute("SELECT * FROM usuarios") 3usuarios = cursor.fetchall() 4 5# Mostrar los resultados 6print("Usuarios en la base de datos:") 7for usuario in usuarios: 8 print(usuario)
- ¿Qué hace este código?:
- Ejecuta una consulta SQL para seleccionar todos los registros de la tabla
usuarios. fetchall()obtiene todos los resultados de la consulta.- Muestra cada usuario en la base de datos.
- Ejecuta una consulta SQL para seleccionar todos los registros de la tabla
- Resultado en pantalla:
Usuarios en la base de datos: (1, 'Ana', 30, 'ana@example.com')
8. Paso 5: Actualizar y eliminar datos #
También puedes actualizar y eliminar registros en la base de datos.
Actualizar datos #
1# Actualizar la edad de un usuario 2cursor.execute(""" 3UPDATE usuarios 4SET edad = 31 5WHERE nombre = 'Ana' 6""") 7 8# Confirmar los cambios 9conexion.commit() 10 11print("Edad del usuario 'Ana' actualizada.")
- Resultado en pantalla:
Edad del usuario 'Ana' actualizada.
Eliminar datos #
1# Eliminar un usuario de la tabla 2cursor.execute("DELETE FROM usuarios WHERE nombre = 'Ana'") 3 4# Confirmar los cambios 5conexion.commit() 6 7print("Usuario 'Ana' eliminado de la base de datos.")
- Resultado en pantalla:
Usuario 'Ana' eliminado de la base de datos.
9. Paso 6: Cerrar la conexión #
Finalmente, siempre debes cerrar la conexión con la base de datos cuando termines de trabajar con ella.
1# Cerrar la conexión 2conexion.close() 3 4print("Conexión a la base de datos cerrada.")
- Resultado en pantalla:
Conexión a la base de datos cerrada.
Resumen del tema
Conceptos clave #
- Módulo Nativo
sqlite3: motor SQL embebido y serverless que persiste bases de datos relacionales en un único archivo en disco o en memoria (:memory:). - Flujo de Trabajo Estándar:
- Conexión:
conn = sqlite3.connect("db.sqlite"). - Cursor:
cur = conn.cursor()para ejecutar sentencias SQL (.execute(),.executemany()). - Transacciones:
conn.commit()para persistir cambios yconn.rollback()para deshacer transacciones fallidas. - Recuperación:
.fetchone(),.fetchall(),.fetchmany(n).
- Conexión:
- Consultas Parametrizadas: usar siempre marcadores de posición
?(cursor.execute("SELECT * FROM t WHERE id = ?", (id,))) para prevenir inyecciones SQL.
Qué debes recordar #
SQLite con sqlite3 permite integrar bases de datos relacionales completas sin servidor, requiriendo siempre consultas parametrizadas con ? y confirmación con .commit().