MySQL / PyMySQL

 

¿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:

  1. Se conecte a MySQL

  2. Cree una tabla clientes con:

    • id

    • nombre

    • ciudad

    • telefono

  3. Permita mediante un menú:

    • Añadir cliente

    • Mostrar todos

    • Buscar por ciudad

    • Actualizar teléfono

    • Eliminar cliente

  4. Use funciones para cada operación

  5. 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