Python, MySQL y como mezclarlos para hacer consultas

Siempre es interesante juntar Python y MySQL, de esta mezcla pueden resultar programas muy útiles.

Por ejemplo, se pueden hacer consultas a una base de datos y el resultado enviarlo por Telegram, guardarlo en una hoja de cálculo, enviar esa información por correo, hacer cálculos o simplemente mostrarlo en pantalla.

La potencia de una base de datos es guardar grandes cantidades de información para luego filtrarla a gran velocidad, las ventajas con muchas.

En este artículo verán un ejemplo sencillo de como hacer una consulta con Python a una base de datos MySQL ¡Comenzamos!

PyMySQL es el que hace la magia

Hacer consultas con Python es relativamente sencillo. Para lograr una conexión a una base de datos usé la librería PyMySQL.

Es importante recalcar que esta librería sirve tanto para MySQL como para MariaDB y no hay muchas diferencias en cuanto a su uso.

Para instalarla solo es necesario:

python3 -m pip install PyMySQL

Hecho esto lo que sigue es puro código.

Importar la librería y establecer la conexión.

Claro que para que este código funcione primero hay que tener un servidor MySQL junto con un usuario y contraseña que permita una conexión.

Veamos el siguiente ejemplo:

import pymysql

# Variables generales de conexión a la base de datos.
servidor_ip = '192.168.10.40'
usuario = 'usuariodb'
contraseña = '12345678'
base_de_datos = 'world'

# Establecemos la conexión con el servidor MySQL.
db = pymysql.connect(host=servidor_ip,
                     user=usuario,
                     password=contraseña,
                     database=base_de_datos,
                     charset='utf8',
                     cursorclass=pymysql.cursors.DictCursor)

SQL entra en acción

Llegó el momento de ponerse serios, el verdadero poder de un servidor de base de datos son las consultas.

A mi me gusta trabajar las consultas con editor gráfico como HeidiSQL para luego copiarla en el código.

heidisql y su editor de consultas.
HeidiSQL y su editor de consultas.

Esta es una base de datos de ejemplo que guarda información de países, ciudades y sus idiomas. Es la famosa base de datos World que se puede descargar para practicar.

Supongamos que queremos una lista de países que hablan Español. La consulta quedaría más o menos así:

# El cursor nos permite trabajar con la base de datos.
cursor = db.cursor()

# SQL entra en acción.
consulta = "SELECT country.Name " + \
    "FROM country " + \
    "INNER JOIN countrylanguage ON countrylanguage.CountryCode = Code " + \
    "WHERE Language = 'Spanish';"

Los resultados de la consulta

Ahora viene lo interesante, ejecutar la consulta y guardar los resultados en una variable en la que podamos trabajar.

# Ejecutamos la consulta :)
cursor.execute(consulta)

# Y los resultados los almacenamos en la variable datos.
datos = cursor.fetchall()

print(datos)

Pero si sólo hago un print(datos) el resultado es el siguiente:

[{'Name': 'Aruba'}, {'Name': 'Andorra'}, {'Name': 'Argentina'}, {'Name': 'Belize'}, {'Name': 'Bolivia'}, {'Name': 'Canada'}, {'Name': 'Chile'}, {'Name': 'Colombia'}, {'Name': 'Costa Rica'}, {'Name': 'Cuba'}, {'Name': 'Dominican Republic'}, {'Name': 'Ecuador'}, {'Name': 'Spain'}, {'Name': 'France'}, {'Name': 'Guatemala'}, {'Name': 'Honduras'}, {'Name': 'Mexico'}, {'Name': 'Nicaragua'}, {'Name': 'Panama'}, {'Name': 'Peru'}, {'Name': 'Puerto Rico'}, {'Name': 'Paraguay'}, {'Name': 'El Salvador'}, {'Name': 'Sweden'}, {'Name': 'Uruguay'}, {'Name': 'United States'}, {'Name': 'Venezuela'}, {'Name': 'Virgin Islands, U.S.'}]

Que visualmente no es muy agradable, así que vamos a enchular un poco el resultado de la consulta recorriendo el diccionario datos.

for i in datos:
    print(i['Name'])

Que da como resultado una salida mucho más legible:

Aruba
Andorra
Argentina
Belize
Bolivia
Canada
Chile
Colombia
Costa Rica
Cuba
Dominican Republic
Ecuador
Spain
France
Guatemala
Honduras
Mexico
Nicaragua
Panama
Peru
Puerto Rico
Paraguay
El Salvador
Sweden
Uruguay
United States
Venezuela
Virgin Islands, U.S.

Cierre la puerta al salir

Claro que una vez que todo termina, es una buena idea cerrar la conexión. Para evitar que el servidor le siga asignando recursos y este atento a las peticiones.

db.close()

Todo junto

Al final todo el código sería así

import pymysql

# Variables generales de conexión a la base de datos.
servidor_ip = '192.168.10.40'
usuario = 'usuariodb'
contraseña = '12345678'
base_de_datos = 'world'

# Establecemos la conexión con el servidor MySQL.
db = pymysql.connect(host=servidor_ip,
                     user=usuario,
                     password=contraseña,
                     database=base_de_datos,
                     charset='utf8',
                     cursorclass=pymysql.cursors.DictCursor)

# El cursor nos permite trabajar con la base de datos.
cursor = db.cursor()

# SQL entra en acción.
consulta = "SELECT country.Name " + \
    "FROM country " + \
    "INNER JOIN countrylanguage ON countrylanguage.CountryCode = Code " + \
    "WHERE Language = 'Spanish' " + \
    "ORDER BY Name;"

# Ejecutamos la consulta :)
cursor.execute(consulta)

# Y los resultados los almacenamos en la variable datos.
datos = cursor.fetchall()

for i in datos:
    print(i['Name'])

# Cerrar la conexión al terminar
db.close()
python mysql el programa funcionando
El programa funcionando ¡Cooool!

Conclusiones

Como ven las posibilidades son muchas, no solamente para hacer consultas, también es posible alimentar una base de datos de diversas fuentes, archivos de texto, hojas de cálculo, incluso desde la misma terminal.

¿Qué les pareció este artículo?

¿Saben de otra forma de hacer consultas a una base de datos MySQL con Python?

¡Me encantaría saber que opinas!

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.