81 - MySQL : Base de datos desde Python

Cuando tenemos que almacenar gran cantidad de datos y su posterior procesamiento es muy común utilizar un gestor de bases de datos.
Con Python podemos comunicarnos con un gestor de bases de datos para enviar y recuperar datos.

Existen gran cantidad de gestores de bases de datos y el primero que veremos para ver cual es la mecánica para conectarnos desde Python será el gestor de base de datos MySQL.

Deberemos instalar primero si no lo tenemos a MySQL.

Instalación de MySQL.

Para facilitar la administración del MySQL utilizaremos el programa XAMPP que entre otros instala:

  • MySQL
  • PHPMyAdmin (que nos permitirá administrar las bases de datos existentes en MySQL)
  • PHP (Lenguaje que nos permite ejecutar el PHPMyAdmin)
  • Apache (Servidor Web que nos permite ejecutar PHPMyAdmin y PHP en un servidor)

Descargamos e instalamos XAMPP para el sistema operativo que estamos trabajando.

Los pasos para instalar son muy sencillos:

instalación de xampp

Lo mínimo que debemos instalar es:

instalación de xampp

Una vez finalizada la instalación de todo el software debemos arrancar el programa "XAMPP Control Panel":

XAMPP Control Panel

Aparece la interfaz desde donde debemos iniciar el gestor de base de datos MySQL:

XAMPP Control Panel

Presionamos el botón "Start" tanto para MySQL como para Apache:

XAMPP Control Panel

Si aparecen en verde significa que los programas se encuentran correctamente en funcionamiento.

Creación de la base de datos MySQL.

Para crear la base de datos utilizaremos el programa PHPMyAdmin que lo iniciamos presionando el botón "MySQL - Admin" del "XAMPP Control Panel":

PHPMyAdmin XAMPP Control Panel

Se nos abre una aplicación web PHPMyAdmin que nos permite administrar nuestras bases de datos de MySQL:

PHPMyAdmin

Crearemos una base de datos seleccionando la opción "Nueva" que aparece del lado izquierdo de la página.

En el siguiente diálogo debemos definir el nombre de nuestra base de datos, la llamaremos "bd1":

PHPMyAdmin creación de base de datos

Una vez que se crea la podemos ver que aparece en la columna izquierda y podemos pasar a crear tablas en la misma. Crearemos la tabla artículos que tendrá 3 campos:

PHPMyAdmin creación de tablas

Almacenaremos en la tabla articulos el codigo, descripcion y precio.
El campo 'codigo' será int'clave primaria' y auto_increment.
El campo 'descripcion' será varchar de 50.
El campo 'precio' será float.

Los datos a ingresar para cada campo para la creación de la tabla articulos son:

PHPMyAdmin creación de tabla articulos

Ya tenemos creada la base de datos: "bd1" y en ésta la tabla "articulos":

PHPMyAdmin base de datos y tablas

Paquete de Python necesario para conectarnos a MySQL.

Utilizaremos el programa 'pip' que vimos anteriormente para instalar el paquete necesario para interconectar 'Python' y 'MySQL'.

Desde la línea de comandos ejecutamos el programa pip con el siguiente paquete a instalar:

pip install mysql-connector

Luego de ejecutar el programa pip podemos ver que nos informa de la instalación del paquete 'mysql-connector':

pip install mysql-connector

Conexión con el servidor de MySQL.

Controlar que el "XAMPP Control Panel" se encuentre en ejecución el servidor de MySQL:

El primer programa que implementaremos nos conectaremos con el servidor de MySQL y mostraremos todas las bases de datos existentes (una de esas debería ser bd1)

Programa: ejercicio276.py

Ver video

import mysql.connector

conexion1=mysql.connector.connect(host="localhost", user="root", passwd="")
cursor1=conexion1.cursor()
cursor1.execute("show databases")
for base in cursor1:
    print(base)
conexion1.close()    

El resultado de ejecutar este programa es:

show databases python mysql

Lo primero que hacemos es importar el módulo que nos permite conectarnos con MySQL:

import mysql.connector

Del módulo importado llamamos a la función connect pasando la ubicación de nuestro servidor que es 'localhost', el usuario que por defecto al instalar MySQL se creó el usuario 'root' y la clave de ese usuario que tiene por defecto un string vacío:

conexion1=mysql.connector.connect(host="localhost", user="root", passwd="")

Si por ejemplo el servidor de MySQL no se encuentra en ejecución el programa se detendrá en esta línea informando un error.

Luego a partir del objeto 'conexion1' que es de la clase 'MySQLConnection' llamamos al método 'cursor':

cursor1=conexion1.cursor()

A partir del objeto 'cursor1' llamamos al método execute y le pasamos como parámetro un comando SQL, en este caso 'show databases':

cursor1.execute("show databases")

Mediante un for podemos ver todas las bases de datos existentes en nuestro servidor de MySQL:

for base in cursor1:
    print(base)

Finalmente cerramos la conexión con el servidor de MySQL:

conexion1.close()    

Listado de todas las tablas de una base de datos de MySQL.

Ahora implementaremos un programa que recupere todas las tablas contenidos en una base de datos. Trabajaremos con la base de datos que creamos desde el PHPMyAdmin llamada 'bd1'.

Programa: ejercicio277.py

Ver video

import mysql.connector

conexion1=mysql.connector.connect(host="localhost", 
                                  user="root", 
                                  passwd="", 
                                  database="bd1")
cursor1=conexion1.cursor()
cursor1.execute("show tables")
for tabla in cursor1:
    print(tabla)
conexion1.close()    

El resultado de ejecutar este programa es:

show tables python mysql

Cuando nos conectamos con el servidor de MySQL indicamos en 'database' la base de datos activa para cuando lancemos comandos SQL:

conexion1=mysql.connector.connect(host="localhost", 
                                  user="root", 
                                  passwd="", 
                                  database="bd1")

Luego de crear el cursor solicitamos que se ejecute el comando SQL 'show tables' que nos retorna todas las tablas existentes de la base de datos activa indicada cuando llamamos a 'connect':

cursor1=conexion1.cursor()
cursor1.execute("show tables")

Imprimimos con un for todas las tablas y cerramos la conexión:

for tabla in cursor1:
    print(tabla)
conexion1.close()    

Insertar filas en una tabla.

Ahora implementaremos un programa que inserte un par de filas en la tabla 'articulos'.

Programa: ejercicio278.py

Ver video

import mysql.connector

conexion1=mysql.connector.connect(host="localhost", 
                                  user="root", 
                                  passwd="", 
                                  database="bd1")
cursor1=conexion1.cursor()
sql="insert into articulos(descripcion, precio) values (%s,%s)"
datos=("naranjas", 23.50)
cursor1.execute(sql, datos)
datos=("peras", 34)
cursor1.execute(sql, datos)
datos=("bananas", 25)
cursor1.execute(sql, datos)
conexion1.commit()
conexion1.close()    

Por el momento si queremos controlar que se han cargado las tres filas en la tabla 'articulos' podemos abrir el 'PHPMyAdmin' y ver el contenido de la tabla:

insert python mysql

Definimos un string con el comando SQL insert disponiendo la máscara %s donde queremos que se sustituya por un valor que le pasaremos al método execute:

sql="insert into articulos(descripcion, precio) values (%s,%s)"

La variable datos es una tupla que contiene los datos que se utilizarán en la sustitución %s:

datos=("naranjas", 23.50)

Finalmente llamamos al método 'execute' y le pasamos las dos variables que acabamos de crear:

cursor1.execute(sql, datos)

Es fundamental llamar al final al método 'commit' para que queden firmes los comandos SQL 'insert':

conexion1.commit()

Recuperar todas las filas de una tabla.

Implementaremos un programa que solicite ejecutar un 'select' en la tabla 'articulos' y nos retorne todas sus filas.

Programa: ejercicio279.py

Ver video

import mysql.connector

conexion1=mysql.connector.connect(host="localhost", 
                                  user="root", 
                                  passwd="", 
                                  database="bd1")
cursor1=conexion1.cursor()
cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)
conexion1.close()    

Cuando ejecutamos el programa podemos ver que se recuperan todas las filas de la tabla 'articulos':

select python mysql

Luego de conectarnos y crear un cursor procedemos a ejecutar el comando 'select', recorremos con un for el 'cursor1':

cursor1=conexion1.cursor()
cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)

Borrado y modificación de filas.

Las otras dos actividades fundamentales que podemos hacer con una tabla es borrar filas y modificar datos.
Desarrollaremos un pequeño programa que borre el artículo cuyo código sea el 1 y modifique el precio del artículo cuyo código sea 3.

Programa: ejercicio280.py

Ver video

import mysql.connector

conexion1=mysql.connector.connect(host="localhost", 
                                  user="root", 
                                  passwd="", 
                                  database="bd1")
cursor1=conexion1.cursor()
cursor1.execute("delete from articulos where codigo=1")
cursor1.execute("update articulos set precio=50 where codigo=3")
conexion1.commit()
cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)
conexion1.close()    

Cuando ejecutamos el programa podemos ver que se eliminó el artículo cuyo código es 1 y se modificó el precio del artículo con código 3:

delete update python mysql

Luego de crear el cursor podemos llamar al método 'execute' varias veces y pasar distintos comando SQL:

cursor1=conexion1.cursor()
cursor1.execute("delete from articulos where codigo=1")
cursor1.execute("update articulos set precio=50 where codigo=3")

Siempre que pasemos un comando SQL: insert, delete o update debemos llamar al método commit para que quede firme los cambios en la base de datos:

conexion1.commit()

Ejecutamos finalmente un 'select' para comprobar los cambios efectuados en la tabla 'articulos':

cursor1.execute("select codigo, descripcion, precio from articulos")
for fila in cursor1:
    print(fila)