Primeros pasos con MySQL
Aprende a conectar Python a una base de datos MySQL con mysql-connector-python. Instalación, conexión, creación de bases de datos y consultas básicas.
Python puede comunicarse con bases de datos MySQL a través del controlador oficial MySQL Connector/Python. Este capítulo muestra cómo instalar el controlador, establecer una conexión, crear una base de datos y ejecutar tus primeras consultas — sentando una base sólida antes de pasar a crear tablas, insertar filas y consultar datos.
Lo que necesitas
Antes de escribir cualquier código necesitas tener dos cosas listas:
- Python 3.7 o posterior instalado en tu máquina.
- Un servidor MySQL en ejecución — ya sea una instalación local (MySQL Community Server) o una instancia en la nube (PlanetScale, Amazon RDS, etc.).
No es necesario crear una base de datos de antemano; la crearás desde Python en una sección posterior.
Instalación de MySQL Connector/Python
MySQL Connector/Python es el controlador oficial de MySQL mantenido por Oracle. Instálalo con pip:
pip install mysql-connector-pythonVerifica la instalación:
import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0Si ves un número de versión, el controlador está listo para usar.
¿Por qué mysql-connector-python y no PyMySQL?
Ambos controladores funcionan, pero mysql-connector-python es el controlador oficialmente compatible de Oracle. Usa una implementación en Python puro por defecto y, opcionalmente, una extensión en C para mejor rendimiento. PyMySQL es una popular alternativa de la comunidad con una API casi idéntica. Los capítulos de esta sección usan mysql-connector-python.
Conexión a un servidor MySQL
Usa mysql.connector.connect() para abrir una conexión. Pasa tus credenciales como argumentos de palabras clave:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
if connection.is_connected():
print("Connected to MySQL Server")
connection.close()Reemplaza yourusername y yourpassword con tus credenciales reales. El valor de host es "localhost" cuando MySQL se ejecuta en la misma máquina; usa una dirección IP o nombre de host para un servidor remoto.
Mantener las credenciales fuera del código fuente
Codificar contraseñas directamente en los scripts es un riesgo de seguridad. Guárdalas en variables de entorno y léelas en tiempo de ejecución:
import mysql.connector
import os
connection = mysql.connector.connect(
host=os.environ.get("MYSQL_HOST", "localhost"),
user=os.environ.get("MYSQL_USER"),
password=os.environ.get("MYSQL_PASSWORD")
)
print("Connected:", connection.is_connected())
connection.close()Establece las variables en tu shell antes de ejecutar el script:
export MYSQL_USER=yourusername
export MYSQL_PASSWORD=yourpassword
python connect.pyCreación de una base de datos
Una vez conectado al servidor (sin especificar una base de datos), puedes crear una con una instrucción CREATE DATABASE. Ejecútala a través de un cursor — un objeto que envía comandos SQL y recupera resultados.
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
print("Database created")
cursor.close()
connection.close()La cláusula IF NOT EXISTS evita un error si la base de datos ya existe.
Listar bases de datos
Puedes verificar que la base de datos fue creada listando todas las bases de datos del servidor:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("SHOW DATABASES")
for db in cursor:
print(db)
cursor.close()
connection.close()Cada fila se devuelve como una tupla, por lo que verás una salida como esta:
('information_schema',)
('mydatabase',)
('mysql',)
('performance_schema',)
('sys',)Conexión a una base de datos específica
Una vez que la base de datos existe, incluye el parámetro database al conectar para que todas las consultas posteriores se ejecuten contra ella:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Database in use:", connection.database)
connection.close()Uso de un gestor de contexto (patrón recomendado)
Llamar manualmente a .close() en cada conexión y cursor es propenso a errores — si ocurre una excepción antes de .close(), la conexión queda abierta. Usa un bloque try/finally o, mejor aún, envuelve el cursor en una instrucción with:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
try:
with connection.cursor() as cursor:
cursor.execute("SELECT DATABASE()")
row = cursor.fetchone()
print("Current database:", row[0])
finally:
connection.close()El bloque with cierra el cursor automáticamente cuando el bloque termina, incluso si se lanza una excepción.
Manejo de errores de conexión
Los problemas de red o las credenciales incorrectas lanzan mysql.connector.Error. Siempre maneja esta excepción en el código de producción:
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Connection successful")
except Error as e:
print(f"Error connecting to MySQL: {e}")
finally:
if "connection" in dir() and connection.is_connected():
connection.close()
print("Connection closed")Errores comunes que puedes encontrar:
| Código de error | Significado |
|---|---|
| 1045 | Acceso denegado — nombre de usuario o contraseña incorrectos |
| 2003 | No se puede conectar al host — servidor no activo o host/puerto incorrecto |
| 1049 | Base de datos desconocida — el nombre en database no existe |
Referencia rápida: parámetros de conexión
| Parámetro | Tipo | Descripción |
|---|---|---|
host | string | Nombre de host o IP del servidor MySQL (por defecto "127.0.0.1") |
port | int | Puerto de MySQL (por defecto 3306) |
user | string | Nombre de usuario de MySQL |
password | string | Contraseña de MySQL |
database | string | Base de datos a seleccionar al conectar |
charset | string | Juego de caracteres (por defecto "utf8mb4") |
connect_timeout | int | Segundos de espera para la conexión (por defecto 10) |
use_pure | boolean | True = Python puro; False = extensión C si está disponible |
Qué viene a continuación
Con una conexión funcionando, estás listo para seguir construyendo:
- Crear una tabla — define columnas y tipos de datos con
CREATE TABLE. - Insertar filas — agrega datos con
INSERT INTOy consultas parametrizadas. - Consultar datos — recupera filas con
SELECT,fetchone()yfetchall(). - Filtrar filas — acota resultados con cláusulas
WHERE. - Crear una base de datos — recorrido completo del comando
CREATE DATABASE.