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.
Para facilitar la administración del MySQL utilizaremos el programa XAMPP que entre otros instala:
Descargamos e instalamos XAMPP para el sistema operativo que estamos trabajando.
Los pasos para instalar son muy sencillos:
Lo mínimo que debemos instalar es:
Una vez finalizada la instalación de todo el software debemos arrancar el programa "XAMPP Control Panel":
Aparece la interfaz desde donde debemos iniciar el gestor de base de datos MySQL:
Presionamos el botón "Start" tanto para MySQL como para Apache:
Si aparecen en verde significa que los programas se encuentran correctamente en funcionamiento.
Para crear la base de datos utilizaremos el programa PHPMyAdmin que lo iniciamos presionando el botón "MySQL - Admin" del "XAMPP Control Panel":
Se nos abre una aplicación web PHPMyAdmin que nos permite administrar nuestras bases de datos de MySQL:
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":
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:
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:
Ya tenemos creada la base de datos: "bd1" y en ésta la tabla "articulos":
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':
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)
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:
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()
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'.
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:
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()
Ahora implementaremos un programa que inserte un par de filas en la tabla 'articulos'.
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:
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()
Implementaremos un programa que solicite ejecutar un 'select' en la tabla 'articulos' y nos retorne todas sus filas.
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':
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)
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.
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:
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)