W3docs

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-python

Verifica la instalación:

import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0

Si 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.py

Creació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 errorSignificado
1045Acceso denegado — nombre de usuario o contraseña incorrectos
2003No se puede conectar al host — servidor no activo o host/puerto incorrecto
1049Base de datos desconocida — el nombre en database no existe

Referencia rápida: parámetros de conexión

ParámetroTipoDescripción
hoststringNombre de host o IP del servidor MySQL (por defecto "127.0.0.1")
portintPuerto de MySQL (por defecto 3306)
userstringNombre de usuario de MySQL
passwordstringContraseña de MySQL
databasestringBase de datos a seleccionar al conectar
charsetstringJuego de caracteres (por defecto "utf8mb4")
connect_timeoutintSegundos de espera para la conexión (por defecto 10)
use_purebooleanTrue = 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:

Was this page helpful?