Volver al Menú de Temas

Introducción a SQL y Operaciones CRUD

Aprende qué es SQL, cómo se estructuran las consultas básicas y cómo ejecutarlas de forma segura desde Python.


Introducción a Bases de Datos y SQL

Hasta ahora, los datos de nuestros programas vivían en la memoria RAM: al cerrar el programa, todo se borraba. Para guardar información de forma permanente, utilizamos Bases de Datos Relacionales.

Imagina una base de datos relacional como un archivo de Excel súper vitaminado, donde la información se guarda en Tablas con Columnas (atributos) y Filas (registros individuales).

Pero, ¿cómo hablamos con ese “Excel”? Lo hacemos usando SQL (Structured Query Language).

¿Qué es una Consulta (Query)?

Una consulta no es más que una instrucción o pregunta que le hacemos a la base de datos. Para que la base de datos nos entienda, usamos palabras clave en inglés.

Casi todo lo que hacemos en cualquier aplicación del mundo (desde Facebook hasta el cajero del supermercado) se resume en 4 operaciones fundamentales, conocidas como el patrón CRUD:

1. Create (Crear) -> INSERT

Sirve para agregar una nueva fila a nuestra tabla.

INSERT INTO productos (nombre, cantidad, precio) VALUES (‘Manzanas’, 50, 12.50);

Leemos: Inserta dentro de la tabla productos, en las columnas (nombre, cantidad, precio), los valores (‘Manzanas’, 50, 12.50).

2. Read (Leer) -> SELECT

Sirve para buscar y traer información. Es la consulta más usada.

— El asterisco (*) significa “tráeme TODAS las columnas” SELECT * FROM productos;

— También podemos filtrar con la cláusula WHERE (Donde) SELECT nombre, precio FROM productos WHERE cantidad = 0;

3. Update (Actualizar) -> UPDATE

Sirve para modificar un dato que ya existe. ¡Ojo! Si olvidas el WHERE, actualizarás toda la tabla por accidente.

UPDATE productos SET precio = 15.00 WHERE id = 1;

4. Delete (Borrar) -> DELETE

Sirve para eliminar una fila completa. Igual que con UPDATE, el WHERE es obligatorio para no borrar todo.

DELETE FROM productos WHERE id = 5;

¿Cómo usamos SQL dentro de Python?

Para que Python pueda hablar con nuestra base de datos MySQL, necesitamos tres cosas:

La Conexión: El “puente” entre nuestro código y el servidor.

El Cursor: Imagina al cursor como un “mensajero”. Python le da la consulta SQL al cursor, el cursor viaja por el puente hasta la base de datos, ejecuta la orden, y si hay resultados, los trae de vuelta a Python.

El Commit (Guardar): Cuando hacemos INSERT, UPDATE o DELETE, la base de datos prepara el cambio pero no lo guarda definitivamente hasta que le damos la orden commit(). Es como darle a “Guardar” en un documento.

Ejemplo de uso en Python:

1. Establecemos la conexión (asumiendo que tenemos nuestra función lista)

bd = obtener_conexion()

2. Creamos al “mensajero”

cursor = bd.cursor()

3. Preparamos nuestra consulta SQL

sql = “SELECT * FROM productos”

4. El mensajero ejecuta la orden

cursor.execute(sql)

5. El mensajero nos trae todos los resultados

resultados = cursor.fetchall()

6. Cerramos la base de datos

bd.close()

Seguridad: El uso del comodín %s

Cuando queremos insertar datos que el usuario escribió en un input(), NUNCA debemos pegarlos directamente en la consulta usando concatenación (con el signo + o f-strings). Hacer eso permite que un usuario malintencionado destruya nuestra base de datos (un ataque llamado Inyección SQL).

En su lugar, usamos el comodín %s en el texto de SQL, y le pasamos a Python una tupla con los valores reales. Python se encargará de “limpiar” los datos antes de enviarlos.

Forma Correcta y Segura:

Ponemos %s donde irán los valores

sql = “INSERT INTO productos (nombre, precio) VALUES (%s, %s)“

Guardamos los datos en una tupla

valores = (“Galletas”, 18.50)

El cursor se encarga de unirlos de forma segura

cursor.execute(sql, valores) bd.commit()

codigo actividad: https://github.com/ellenzilla/actividadbd