Conectar Python a una base de datos MySQL es una habilidad esencial para cualquier desarrollador que trabaje con datos. El módulo `mysql.connector` de Python es una herramienta poderosa y fácil de usar que te permite interactuar con bases de datos MySQL desde tus scripts de Python.
En este artículo, te explicaré qué es `mysql.connector`, cómo instalarlo, cómo realizar las operaciones CRUD (crear, leer, actualizar y eliminar) y qué buenas prácticas seguir al trabajar con bases de datos.
`mysql.connector` es un módulo oficial proporcionado por Oracle que permite conectar Python con bases de datos MySQL. Te permite realizar operaciones comunes en bases de datos como insertar, leer, actualizar o eliminar registros, así como ejecutar consultas más complejas como JOINs o agregaciones.
Al usar `mysql.connector`, puedes aprovechar todo el poder de MySQL dentro de tus aplicaciones Python, permitiendo gestionar datos de manera eficiente.
Antes de comenzar a usar `mysql.connector`, necesitas instalar el paquete en tu entorno Python. Esto lo puedes hacer fácilmente con `pip`:
pip install mysql-connector-python
Este comando instala la versión más reciente del módulo `mysql-connector-python`, asegurando que estás listo para comenzar a trabajar con bases de datos MySQL.
El primer paso para interactuar con una base de datos es establecer una conexión entre Python y el servidor MySQL. Para hacerlo, necesitas proporcionar la información necesaria para la conexión, como el nombre del servidor, el usuario, la contraseña y el nombre de la base de datos.
Ejemplo básico de conexión:
import mysql.connector
# Establecer la conexión con MySQL
conexion = mysql.connector.connect(
host="localhost", # Servidor
user="tu_usuario", # Usuario de MySQL
password="tu_contraseña", # Contraseña
database="mi_base_de_datos" # Nombre de la base de datos
)
# Verificar si la conexión fue exitosa
if conexion.is_connected():
print("Conexión exitosa a la base de datos")
else:
print("Error al conectar a la base de datos")
# Cerrar la conexión
conexion.close()
Explicación del código:
- `mysql.connector.connect()`: Esta función establece la conexión con el servidor MySQL utilizando los parámetros que le proporcionas.
- `host`: Especifica la dirección del servidor MySQL. Si MySQL está en tu máquina local, puedes usar `localhost`.
- `user` y `password`: Son las credenciales para acceder al servidor MySQL.
- `database`: Nombre de la base de datos con la que deseas trabajar.
- `conexion.close()`: Siempre es una buena práctica cerrar la conexión una vez que has terminado de interactuar con la base de datos.
Una vez establecida la conexión, puedes empezar a realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en tu base de datos MySQL.
Para insertar datos en una tabla, puedes usar la consulta `INSERT INTO`. Supongamos que tenemos una tabla llamada `usuarios` con las columnas `nombre` y `email`.
Ejemplo de inserción de datos:
import mysql.connector
# Conectar a la base de datos
conexion = mysql.connector.connect(
host="localhost",
user="tu_usuario",
password="tu_contraseña",
database="mi_base_de_datos"
)
cursor = conexion.cursor()
# Consulta SQL para insertar datos
sql = "INSERT INTO usuarios (nombre, email) VALUES (%s, %s)"
valores = ("Juan Pérez", "juanperez@gmail.com")
# Ejecutar la consulta
cursor.execute(sql, valores)
# Confirmar los cambios
conexion.commit()
print(f"{cursor.rowcount} registro insertado.")
# Cerrar la conexión
cursor.close()
conexion.close()
Explicación:
- `cursor.execute()`: Ejecuta la consulta SQL. Utilizamos `%s` como un marcador de posición para los valores que se pasarán como una tupla.
- `conexion.commit()`: Guarda los cambios realizados en la base de datos, lo que significa que el nuevo registro se inserta permanentemente.
Para leer datos de la base de datos, utilizamos la consulta `SELECT`. A continuación te muestro cómo recuperar todos los registros de la tabla `usuarios`.
Ejemplo de lectura de datos:
import mysql.connector
# Conectar a la base de datos
conexion = mysql.connector.connect(
host="localhost",
user="tu_usuario",
password="tu_contraseña",
database="mi_base_de_datos"
)
cursor = conexion.cursor()
# Consulta SQL para seleccionar datos
cursor.execute("SELECT * FROM usuarios")
# Obtener todos los resultados
resultados = cursor.fetchall()
# Imprimir los resultados
for fila in resultados:
print(fila)
# Cerrar la conexión
cursor.close()
conexion.close()
Explicación:
- `cursor.execute("SELECT * FROM usuarios")`: Ejecuta la consulta para seleccionar todos los registros de la tabla `usuarios`.
- `cursor.fetchall()`: Obtiene todos los registros de la tabla y los guarda en la variable `resultados`.
- `for fila in resultados`: Itera sobre los resultados para imprimir cada registro.
Para actualizar un registro existente, usamos la consulta `UPDATE`. Supongamos que queremos cambiar el correo electrónico de un usuario específico.
Ejemplo de actualización de datos:
import mysql.connector
# Conectar a la base de datos
conexion = mysql.connector.connect(
host="localhost",
user="tu_usuario",
password="tu_contraseña",
database="mi_base_de_datos"
)
cursor = conexion.cursor()
# Consulta SQL para actualizar un registro
sql = "UPDATE usuarios SET email = %s WHERE nombre = %s"
valores = ("nuevoemail@gmail.com", "Juan Pérez")
# Ejecutar la consulta
cursor.execute(sql, valores)
# Confirmar los cambios
conexion.commit()
print(f"{cursor.rowcount} registro(s) actualizado(s).")
# Cerrar la conexión
cursor.close()
conexion.close()
Explicación:
- `UPDATE usuarios SET`: Actualiza la columna `email` de un usuario en particular.
- `WHERE nombre = %s`: Asegura que solo se actualice el registro que cumple con la condición especificada.
Para eliminar un registro, usamos la consulta `DELETE`. Por ejemplo, si queremos eliminar un usuario de la tabla:
Ejemplo de eliminación de datos:
import mysql.connector
# Conectar a la base de datos
conexion = mysql.connector.connect(
host="localhost",
user="tu_usuario",
password="tu_contraseña",
database="mi_base_de_datos"
)
cursor = conexion.cursor()
# Consulta SQL para eliminar un registro
sql = "DELETE FROM usuarios WHERE nombre = %s"
valores = ("Juan Pérez",)
# Ejecutar la consulta
cursor.execute(sql, valores)
# Confirmar los cambios
conexion.commit()
print(f"{cursor.rowcount} registro(s) eliminado(s).")
# Cerrar la conexión
cursor.close()
conexion.close()
Explicación:
- `DELETE FROM usuarios WHERE nombre = %s`: Elimina el registro que coincide con el nombre proporcionado.
Es importante manejar posibles errores al trabajar con bases de datos, como problemas de conexión o consultas mal formateadas. Puedes hacerlo utilizando bloques try-except para capturar excepciones y manejar errores de manera adecuada.
Ejemplo de manejo de excepciones:
import mysql.connector
from mysql.connector import Error
try:
# Intentar conectar a la base de datos
conexion = mysql.connector.connect(
host="localhost",
user="tu_usuario",
password="tu_contraseña",
database="mi_base_de_datos"
)
if conexion.is_connected():
print("Conexión exitosa a la base de datos")
except Error as e:
print(f"Error al conectar a la base de datos: {e}")
finally:
if conexion.is_connected():
conexion.close()
print("Conexión cerrada")
1. Cerrar la conexión: Siempre asegúrate de cerrar la conexión a la base de datos una vez que hayas terminado de interactuar con ella para liberar recursos.
2. Usar `commit()` para confirmaciones: Recuerda llamar a `conexion.commit()` después de cada operación que modifique la base de datos (INSERT, UPDATE, DELETE), ya que los cambios no se guardan automáticamente.
3. Manejo de errores: Implementa manejo de excepciones para evitar que tu aplicación se detenga inesperadamente si hay algún problema con la base de datos.
4. Evitar SQL Injection: Utiliza siempre marcadores de posición (`%s`) en las consultas para evitar ataques de inyección SQL.
Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn
Puedes descargar GRATIS mi manual completo en pdf de Python Rápido