Aprende qué es SQL, cómo se estructuran las consultas básicas y cómo ejecutarlas de forma segura desde Python.
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).
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:
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).
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;
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;
Sirve para eliminar una fila completa. Igual que con UPDATE, el WHERE es obligatorio para no borrar todo.
DELETE FROM productos WHERE id = 5;
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:
bd = obtener_conexion()
cursor = bd.cursor()
sql = “SELECT * FROM productos”
cursor.execute(sql)
resultados = cursor.fetchall()
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:
sql = “INSERT INTO productos (nombre, precio) VALUES (%s, %s)“
valores = (“Galletas”, 18.50)
cursor.execute(sql, valores) bd.commit()
codigo actividad: https://github.com/ellenzilla/actividadbd