Utilizar bases de datos MySQL con Python

Utilizar bases de datos MySQL con Python

Utilizar bases de datos MySQL con Python - 100 días de Python #19

En esta ocasión, pasamos a ver el manejo de bases de datos desde Python con MySQL.

¿Qué es una base de datos?

Una base de datos, es un conjunto de datos almacenados, conectados o relacionados entre sí. Esto nos servirá en el futuro, para hacer muchas cosas. Un ejemplo, podría ser, una base de datos que contenga todo el stock de un negocio, los empleados, los registros de ventas y mucho más.

Estructura de una base de datos MySQL

Las bases de datos, forman una estructura de tabla. El formato es algo como lo que puedes encontrar en un programa como Excel.

tabla mysql

Terminología básica de bases de datos MySQL

Aclaro los siguientes términos de bases de datos y empezamos ya con la instalación de nuestro servidor de bases de datos con el que iremos haciendo pruebas.

  • Tabla.
  • Campo.
  • Registro.
  • Dato.
  • Tipo de dato.

Tablas en las bases de datos

Las bases de datos, normalmente, están formadas por varias tablas, las cuales, se utilizan para separar información que bien puede estar relacionada entre sí, pero que es diferente.

Imagina una base de datos para un programa de gestión de almacén en una empresa. Esta base de datos, podría contar con las siguientes tablas (y cualquier otra que pudiese venir bien en un almacén).

Supongamos pues, que esta base de datos de almacén tiene las siguientes tablas:

  • Pedidos
  • Stock
  • Empleados

Esto podría ser la tabla de empleados:

partes de una tabla mysql

En una tabla, encontraremos los campos, que son el ID, Nombre, Apellido, Teléfono y Dirección.

Estos campos, podemos decir, que son contenedores de datos. Por ejemplo, el campo o columna (también se puede decir así) "Nombre", almacena datos individuales de nombre.

Luego, tenemos lo que se conoce como registros o filas. Estos son el conjunto de datos individuales de cada uno de los campos en la misma fila.

Además, tenemos los datos, que son las porciones individuales de información.

Como último detalle, que sepas, que al igual que en Python, con las variables, en los campos, tenemos diferentes tipos de datos que podemos almacenar, de tipo fecha, de tipo texto, numéricos, etc.

Descargar e Instalar servidor MySQL

Lo primero que necesitas, es crear un servidor capaz de gestionar bases de datos MySQL. Para ello, nos dirigiremos a la página oficial de descargas de MySQL, a la parte gratuita, la "Community".

Te saldrá una página con diferentes descargas. Te interesa "MySQL Community Server":

descargar servidor mysql

Aparecerá una página como esta. Yo voy a realizar la instalación sobre Windows. Haz click en el botón "Go to Download Page".

descargar servidor mysql

Descarga la opción más pesada. La ligera, hará la descarga después, durante la instalación, de modo, que mejor, descarga la más pesada.

descargar servidor mysql

No hace falta crearse una cuenta, dale a la opción "No thanks, just start my download".

mysql community

Abre el ejecutable descargado. Te saldrá una ventana como esta. Elige la opción "Developer Default".

instalación de servidor mysql

En el siguiente paso, puede que te aparezca el siguiente error. Esto se soluciona instalando Visual Studio Community 2015, 2017 o 2019. Con la 2022 aún no funciona. Por cierto, no confundas Visual Studio Code (el del icono azul) con Visual Studio a secas (el de color lila-rosa). Si no utilizas Visual Studio, prueba de omitir este error simplemente haciendo click en "Next".

Solucionar posibles problemas con la instalación MySQL

instalación de servidor mysql

En caso de que ya lo tengas instalado, ves ábrelo y debes instalar el complemento "Desarrollo de escritorio de .NET". Si no sabes como hacerlo, déjame un comentario y te ayudo.

instalación de desarrollo de escritorio de .NET

Una vez hecho esto, haz click en el botón "Check" que se ve en la captura anterior a esta. Si lo has instalado correctamente, debería darte el visto bueno. Ahora, haz click en "Next".

El siguiente paso será darle al botón "Execute" para que empiece a instalar todos los componentes.

instalación de servidor mysql

Una vez terminado, llegarás a esta pantalla. Haz click en el botón "Next".

instalación de servidor mysql

La siguiente ventana, déjala así, por defecto y haz click en "Next".

instalación de servidor mysql

Selecciona la primera opción y click en "Next".

instalación de servidor mysql

Pon una contraseña para la cuenta root (el administrador del servidor). Si solo lo vas a utilizar para esta práctica, no hace falta que te compliques con la contraseña. En cambio, si vas a usarlo para más propósitos, puede que prefieras establecer una contraseña segura. Sobre todo, acuérdate de cuál es.

usuario y contraseña mysql

La siguiente ventana, déjala tal cual está y pulsa el botón "Next".

servicio mysql

Deja la primera opción marcada y pulsa el botón "Next".

permisos servidor mysql

Ahora, te saldrá esta ventana. Haz click en "Execute" y espera a que se complete todo el proceso.

instalación de servidor mysql

Una vez esté todo con los "checks" de color verde, le damos al botón de "Finish".

Aún no está. Ahora, pulsa el botón "Next".

instalación de servidor mysql

La siguiente ventana, déjala sin tocar nada y haz click en el botón "Finish". ¿Hemos terminado? No.

router mysql server

Pulsamos para variar el botón "Next".

instalación de servidor mysql

En esta ocasión, deberás probar la conexión del usuario root con el servidor MySQL. En "User name" escribe root y luego la contraseña que has puesto antes. Espero que no la hayas olvidado. Acto seguido, haz click en el botón "Check". Si te sale en verde "Connection succeeded." como en la imagen, está todo ok.

conectar con bases de datos mysql desde python

Haz click en "Execute" otra vez.

instalación de servidor mysql

Haz click en "Finish". No has terminado, pero casi.

instalación de servidor mysql

Pulsamos una última vez el botón "Next".

instalación de servidor mysql

Y ahora si, "Finish" para finalizar.

Instalar con pip el conector de MySQL para Python

Con esto, ya tienes instalado MySQL en tu equipo. Lo siguiente, será instalar el conector para Python con pip, de forma que podamos utilizar el lenguaje Python y SQL a la vez.

Si no sabes nada de SQL, no te preocupes, porque aunque esto sea un curso de Python, te daré al menos unas cuantas explicaciones para que puedas empezar a desenvolverte por tu cuenta.

Ahora, podemos volver a Visual Studio Code o el editor que emplees con Python. En la Terminal, donde ejecutas los archivos de Python, escribe lo siguiente:

pip install mysql-connector
pip install mysql-connector

Dependiendo de como esté tu instalación, puede que no te funcione con esto. Si te sale un error, prueba con este:

pip install mysql-connector-python

De todas formas, puedes instalar los dos.

Si te sale un error del estilo "pip no se reconoce como un comando interno o externo", seguramente tengas algún problema con el path. Eso ya es otro tema. Si tienes problemas con eso, déjame un comentario, a ver si puedo ayudarte.

MySQL Workbench

Ahora, vamos a dar una revisión rápida a las bases de datos de prueba que se han instalado con MySQL. Para ello, abre la aplicación MySQL Workbench. Es una de las muchas cosas que se han instalado.

En la ventana principal, haz doble click sobre la parte marcada en la imagen.

mysql workbench

Te pedirá la contraseña que has puesto durante la instalación para el usuario root.

iniciar sesión en el servidor mysql

Te saldrá este panel de control para tu servidor. Tienes que ir a la pestaña "Schemas", que son las bases de datos que hay almacenadas.

Te saldrán algunas bases de datos. Puede que en otras versiones se añadan más, pero de momento, hay tres.

bases de datos mysql

Despliega el contenido de "world" y luego "Tables" (tablas). Cada una de estas tablas, contiene las partes que te he comentado anteriormente, registros, campos y datos.

tablas en la base de datos

Ahora, haz click derecho sobre una de ellas y pulsa la opción "SELECT ROWS - Limit 1000". Esto mostrará hasta 1000 filas o registros (rows) de dicha tabla, por supuesto, si tiene menos, mostrará lo que haya.

mostrar registros de tabla

En la siguiente imagen, puedes ver como se ha abierto una pestaña azul que pone el nombre de la tabla sececcionada. En el editor de código, MySQL workbench nos ha escrito el código SQL correspondiente a la consulta "SELECT ROWS - Limit 1000".

SELECT * FROM world.city;

Con esta línea de código SQL, estamos indicando que muestre (SELECT) todo (*) de (FROM) la base de datos (world), en concreto, su tabla "city".

Debajo, en "Result Grid" aparecen como una hoja de Excel, los campos o columnas (ID, Name, CountryCode...) en primera fila. El resto de filas, son cada uno de los registros que tiene la tabla.

A la izquierda, en el panel de información, aparece un resumen de todos los campos de la tabla.

Abajo, en el panel de salida (output) tenemos un resumen de lo que se ha ejecutado en el servidor. Dice que se han devuelto exactamente 1000 registros.

partes de mysql workbench

Para terminar con este capítulo, vamos a hacer una prueba de conexión con la base de datos desde Python. Así podrás tener claro que lo tienes todo correcto y funcionando para seguir progresando en el siguiente capítulo.

Conexión de MySQL desde Python

Importar el módulo mysql connector

Vamos a importar el módulo recientemente instalado con pip "mysql-connector".

Para ello, sencillamente, pon este import:

import mysql.connector

Después, vamos a crear un objeto (variable) que contendrá lo necesario para conectar con tu servidor MySQL.

Puesto que estamos trabajando en local, el argumento "host" tendrá un valor de "localhost". En "user", pon "root" y en "password", la contraseña que has puesto durante la instalación del servidor.

conexion = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "programacionfacil",
)

¿Qué es un cursor en MySQL?

Ahora, para movernos por las bases de datos, necesitarás lo que se conoce como cursor.

Este cursor, no es más que una forma de hacer que se puedan procesar los resultados de las consultas que hagamos al servidor. Para que lo entiendas mejor, sitúate en la tabla que has visto en MySQL Workbench. Ahora, piensa que el cursor es un mecanismo que recorre cada una de estas filas. Las va leyendo.

Mediante el cursor, podemos hacer efectivas ciertas acciones en las bases de datos.

Crear un cursor MySQL

Crear un cursor es de lo más sencillo. Solo tienes que utilizar el objeto de conexión con la base de datos y utilizar el método cursor().

cursor = conexion.cursor()

Leer e imprimir todas las bases de datos del servidor MySQL en Python

Lo siguiente, será utilizar el cursor para hacer algo. Para hacer una prueba sencilla, vamos a imprimir en la consola, todas las bases de datos del servidor MySQL. Esto lo podemos hacer con un bucle.

cursor.execute("SHOW DATABASES")
for bd in cursor:
    print(bd)

Resultado en la consola

('information_schema',)
('mysql',)
('performance_schema',)
('sakila',)
('sys',)
('world',)

El argumento que le doy al método "execute", es un string con código SQL. "SHOW DATABASES", es una instrucción SQL con la que decirle al servidor MySQL que nos devuelva las bases de datos que tiene almacenadas.

Con el método execute(), hacemos que el cursor ejecute algo de código SQL, es algo como eval() que vimos en capítulos anteriores, solo que en este caso, ejecutamos cosas dentro del servidor y no directamente en nuestro PC.

El bucle, sirve para iterar cada una de las filas recorridas por el cursor.

Algunas bases de datos, no las ves en MySQL workbench, cosas técnicas. Te interesa que hayan salido las tres últimas "sakila", "sys" y "world".

Que hayas recibido en la consola información del servidor MySQL, significa que lo has hecho todo de 10. Enhorabuena, ya puedes empezar a utilizar bases de datos MySQL con Python.

Veremos muchas más cosas, pero con esto, ya te puedes dar por satisfecho/a.

Error pylance "CursorBase" is not iterable en Python

Si empleas Visual Studio Code y Pylance para detectar errores en el código, te saldrá este error de pylance: "CursorBase" is not iterable.

for bd in cursor:

Esto es un fallo de Pylance, que está detectando el objeto "cursor" como un elemento no iterable (no recorrible con un bucle). Este es una detección falsa, ya que si ejecutas, funciona correctamente.

Si no quieres ver esta advertencia, puedes darle a corrección rápida y te escribirá una pequeña línea que hace que Pylance ignore el error y no te lo muestre.

error pylance "CursorBase" is not iterable

Finalmente, te dejo el código completo por si no has sabido colocarlo correctamente. Acuérdate de cambiar la contraseña por la tuya.

import mysql.connector

conexion = mysql.connector.connect(
    host = "localhost",
    user = "root",
    password = "programacionfacil",
)

cursor = conexion.cursor()

cursor.execute("SHOW DATABASES")
for bd in cursor:  # type: ignore
    print(bd)

Errores de conexión con el servidor

Si te equivocas con la contraseña y la pones mal, te dará el siguiente error:

Error en la consola

mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

En este caso, dice que el acceso está denegado para 'nombre_usuario'@'host'. Nos indica que se está utilizando contraseña, por lo tanto, quiere decir que la has puesto mal.

Si dejas un string vacío en "password", te dará el mismo error, pero dirá esta vez que no has utilizado contraseña:

Error en la consola

mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

En este capítulo 19 no voy a poner ejercicios, ya que todo ha sido práctica. Suficiente por el momento.

No te pierdas nada sobre Python. Tengo mucho contenido en este enlace.

4 comentarios en «0»

  1. Gracias por la ayuda y orientación, es importante mencionar que seguí la recomendación de instalar mysql-connector y mysql-connector-python y al momento de ejecutar no funciono, salía el error mysql.connector.errors.NotSupportedError: Authentication plugin ‘caching_sha2_password’ is not supported, para solucionarlo en Stackoverflow encontré la solución que fue:
    1. Desinstalar mysql-connector y mysql-connector-python
    2. Instalar mysql-connector-python
    No funciona si solo desinstala mysql-connector.
    Después de esto ya funciono correctamente

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

curso Java Entrada anterior Los tipos de datos primitivos de Java
curso de Python Entrada siguiente Bases de datos MySQL con Python