¿Qué es MySQL?
MySQL es un sistema de gestión de bases de datos relacional (RDBMS):
Muy rápido
Multicliente
Ideal para aplicaciones web
Usado por empresas de todos los tamaños
Requiere servidor (local o remoto)
Python se conecta a MySQL mediante librerías como:
PyMySQL (la más sencilla)
mysql-connector-python
SQLAlchemy (ORM)
Aquí trabajaremos con PyMySQL.
1. Instalación de PyMySQL
pip install pymysql
2. Conectarse a MySQL
import pymysql
conexion = pymysql.connect(
host="localhost",
user="root",
password="tu_contraseña",
database="mi_base"
)
cursor = conexion.cursor()
3. Crear una base de datos (opcional)
cursor.execute("CREATE DATABASE IF NOT EXISTS mi_base")
4. Crear una tabla
cursor.execute("""
CREATE TABLE IF NOT EXISTS usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
edad INT,
email VARCHAR(100)
)
""")
conexion.commit()
5. Insertar datos
cursor.execute(
"INSERT INTO usuarios (nombre, edad, email) VALUES (%s, %s, %s)",
("Ana", 22, "ana@mail.com")
)
conexion.commit()
6. Insertar varios registros
datos = [
("Luis", 30, "luis@mail.com"),
("Marta", 25, "marta@mail.com")
]
cursor.executemany(
"INSERT INTO usuarios (nombre, edad, email) VALUES (%s, %s, %s)",
datos
)
conexion.commit()
7. Consultar datos
Obtener todos
cursor.execute("SELECT * FROM usuarios")
for fila in cursor.fetchall():
print(fila)
Obtener uno
cursor.execute("SELECT * FROM usuarios WHERE id = %s", (1,))
print(cursor.fetchone())
8. Actualizar datos
cursor.execute(
"UPDATE usuarios SET edad = %s WHERE nombre = %s",
(23, "Ana")
)
conexion.commit()
9. Eliminar datos
cursor.execute("DELETE FROM usuarios WHERE id = %s", (2,))
conexion.commit()
10. Cerrar conexión
conexion.close()
11. Convertir resultados en diccionarios (más cómodo)
cursor = conexion.cursor(pymysql.cursors.DictCursor)
cursor.execute("SELECT * FROM usuarios")
fila = cursor.fetchone()
print(fila["nombre"])
ACTIVIDAD PRÁCTICA: “CRUD completo con MySQL + PyMySQL”
Objetivo: que tus alumnos creen un sistema CRUD real conectado a MySQL.
Enunciado
Crea un programa que:
Se conecte a MySQL
Cree una tabla
clientescon:id
nombre
ciudad
telefono
Permita mediante un menú:
Añadir cliente
Mostrar todos
Buscar por ciudad
Actualizar teléfono
Eliminar cliente
Use funciones para cada operación
Maneje errores (try/except)
Solución propuesta
import pymysql
conexion = pymysql.connect(
host="localhost",
user="root",
password="tu_contraseña",
database="empresa"
)
cursor = conexion.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS clientes (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
ciudad VARCHAR(50),
telefono VARCHAR(20)
)
""")
conexion.commit()
def añadir_cliente():
nombre = input("Nombre: ")
ciudad = input("Ciudad: ")
telefono = input("Teléfono: ")
cursor.execute(
"INSERT INTO clientes (nombre, ciudad, telefono) VALUES (%s, %s, %s)",
(nombre, ciudad, telefono)
)
conexion.commit()
def mostrar_clientes():
cursor.execute("SELECT * FROM clientes")
for fila in cursor.fetchall():
print(fila)
def buscar_por_ciudad():
ciudad = input("Ciudad: ")
cursor.execute("SELECT * FROM clientes WHERE ciudad = %s", (ciudad,))
print(cursor.fetchall())
def actualizar_telefono():
nombre = input("Nombre del cliente: ")
nuevo_tel = input("Nuevo teléfono: ")
cursor.execute(
"UPDATE clientes SET telefono = %s WHERE nombre = %s",
(nuevo_tel, nombre)
)
conexion.commit()
def eliminar_cliente():
nombre = input("Nombre del cliente a eliminar: ")
cursor.execute("DELETE FROM clientes WHERE nombre = %s", (nombre,))
conexion.commit()
while True:
print("\n--- MENÚ ---")
print("1. Añadir cliente")
print("2. Mostrar clientes")
print("3. Buscar por ciudad")
print("4. Actualizar teléfono")
print("5. Eliminar cliente")
print("6. Salir")
opcion = input("Opción: ")
if opcion == "1":
añadir_cliente()
elif opcion == "2":
mostrar_clientes()
elif opcion == "3":
buscar_por_ciudad()
elif opcion == "4":
actualizar_telefono()
elif opcion == "5":
eliminar_cliente()
elif opcion == "6":
break
else:
print("Opción no válida.")
conexion.close()
Resultado esperado
Un sistema CRUD completo conectado a MySQL, perfecto para:
Integrarlo con Tkinter
Crear APIs
Conectar con aplicaciones web
Usarlo como proyecto final