Python - Lección 22: Bases de datos MySQL

Esta lección no está destinada a enseñar el lenguaje de consulta estructurada (Structured Query Language - SQL), sino a demostrar cómo se puede utilizar con el lenguaje de programación Python, por lo que es fundamental poseer conocimientos previos de SQL para poder desarrollarse e
dasdasd
n éste tema.

Instalación del gestor de base de datos:

En Linux, existen dos gestores de bases de datos SQL fundamentales y de código abierto. El primero es MySQL y el segundo es MariaDB. MariaDB es el reemplazo directo de MySQL y ambos comparten el mismo el mismo código base, al punto en el que para interactuar con ambos, se utiliza el mismo comando:

mysql

Nosotros vamos a enfocarnos tanto en MariaDB para este curso como en Debian como distribución para la instalación del entorno. Es probable que muchas distribuciones basadas en Debian utilicen los mismos comandos para la instalación, pero en caso de no poder hacerlo, deberán buscar cómo se instala en la distribución que eligieron.

  • Vamos a proceder a instalar el gestor:
sudo apt-get install mariadb-client mariadb-server

Dado que el servicio de mariadb y mysql que vamos a utilizar trabaja a través de un puerto de conexión de nuestro equipo, en este punto tendremos dos caminos a tomar en donde cada uno deberá elegir la opción que contemple mejor.

  1. La primera opción consta de iniciar el servicio y habilitar para que inicie sólo cada vez que el equipo sea encendido.
    Para iniciar el servicio, usaremos la herramienta de SystemD llamada systemctl. Con esta misma herramienta, podemos iniciar, habilitar y detener servicios en nuestro sistema:
  • Iniciar los servicios:
sudo systemctl start mariadb.service
sudo systemctl start mysql.service
  • Habilitar los servicios:
sudo systemctl enable mariadb.service
sudo systemctl enable mysql.service
  1. La segunda opción y mi preferida, es la de evitar habilitar los servicios e iniciarlos solamente cuando vaya a hacer uso de los mismos. De esta manera, evitaremos tener un vector de ataque siempre activo por el cuál pueden acceder a nuestro sistema y al mismo tiempo, evitaremos que nuestro equipo utilice recursos constantemente aunque no estemos utilizando los servicios.
  • Para comenzar con esta opción, procederemos a deshabilitar los servicios en caso de que se hayan habilitado durante la instalación:
sudo systemctl disable mariadb.service
sudo systemctl disable mysql.service

Ahora podemos iniciarlos de igual manera que en la primera opción. Los mismos se detendrán cuando apaquemos o reiniciemos el equipo y, deberemos iniciarlos cada vez que lo encendamos o vayamos a utilizarlos.

  • En caso de querer detener los servicios una vez terminamos de utilizarlos, basta con hacerlo con los siguientes comandos:
sudo systemctl stop mariadb.service
sudo systemctl stop mysql.service

Instalación del módulo mysql.connector para Python:

En Python, existen muchos módulos y librerías para esta misma función, yo voy a enseñarles sólo mysql.connector ya que no sólo es la que más conozco, si no que también es la que me otorgó una mayor flexibilidad a la hora de combinarlas con otras herramientas de Python.

Para instalar módulos nuevos en Python, podemos hacerlo de múltiples formas.

  1. La primera consta en utilizar la herramienta pip, la cual es el gestor propio del lenguaje para incorporarlos. Para hacerlo, debemos respetar la siguiente sintaxis:
pip install <nombre-del-paquete>

Para este caso en particular, necesitamos añadir un parámetro más al comando, ya que en Python a algunas librerías no se recomiendan para ser instaladas a nivel de sistema, si no a través de un entorno virtual de Python.

  • Como para estas librerías en particular no hay mayores inconvenientes al ser instaladas a nivel de sistema, vamos a forzar la instalación:
pip install mysql.connector --break-system-packages

Aclaración: A esto sólo podemos hacerlo en este caso en particular, ya que como dije anteriormente, no genera inconvenientes y también porque a lo largo de este curso no tenemos la necesidad de crear entornos virtuales para desarrollar.
Para más información, lean la documentación de Python.

Configuraciones iniciales en MySQL:

Este paso es fundamental, ya que necesitaremos una base de datos a la cual conectarnos y comenzar a trabajar.
Como no poseemos un usuario creado, debemos iniciar la interfáz mysql en nuestro emulador de terminal como usuario root:

sudo mysql

ó

mysql -u root -p

mysql1

Una vez iniciado el gestor de bases de datos, podemos comenzar a operar con las mismas.

  • Lo primero que debemos hacer en la interfáz, es crear una tabla nueva:
CREATE DATABASE prueba;

  • Ahora vamos a crear un nuevo usuario para iniciar sesión en el gestor y evitar utilizar el usuario root:
CREATE USER '<usuario>'@'<host>' IDENTIFIED BY '<contraseña>';
  • Para finalizar con la configuración del nuevo usuario, necesitamos otortarle los permisos correspondientes para que pueda trabajar sobre dicha base de datos:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO '5ombr4'@'localhost' WITH GRANT OPTION;
  • Por último, vamos a salir del gestor y volveremos a iniciar sesión como el nuevo usuario:
quit;
mysql -u <usuario> -p

Nos pedirá la contraseña de dicho usuario y podremos continuar trabajando normalmente.

Crear una base de datos a través de Python:

Ya nos encontramos listos para volver a Python y comenzar a utilizar. Lo primero que debemos hacer en nuestro programa, es importar las librerías que instalamos anteriormente y luego crear la conexión a nuestra base de datos.

Recuerden que es necesario que el servicio de mariadb y mysql se encuentren activos cada vez que querramos correr un programa que requiera de una conexión a la base de datos.

# Importamos las librerías:
import mysql.connector as mysql
from mysql.connector import Error

# Creamos la conexión a la base de datos:
db = mysql.connect(
		host = "localhost",
		user = "5ombr4",
		passwd = "Contraseña_random",
		database = "prueba"
)

# La siguiente línea es para comprobar que la conexión a la base de datos haya sido exitosa:
print (db)

Bien, ya conectamos nuestro programa a la base de datos. El siguiente paso consiste en crear una tabla en la misma:

# Importamos las librerías:
import mysql.connector as mysql
from mysql.connector import Error

# Creamos la conexión a la base de datos:
db = mysql.connect(
		host = "localhost",
		user = "5ombr4",
		passwd = "Contraseña_random",
		database = "prueba"
)

# La siguiente línea es para comprobar que la conexión a la base de datos haya sido exitosa:
print (db)

# Instanciamos nuestra base de datos:
cursor = db.cursor()
# Especificamos la consulta mysql:
cursor.execute ("CREATE TABLE Gente(Nombre varchar(50), Edad int, Ciudad varchar(50))")

Podemos corroborar en nuestra base de datos si la tabla ha sido creada siguiendo la siguiente ejecución de comandos en mysql:

USE prueba;
SHOW tables;

Insertar datos:

¡Muy bien! ¡Ya podemos comenzar a insertar nuestros primeros datos!:

import mysql.connector as mysql
from mysql.connector import Error

db = mysql.connect(
		host = "localhost",
		user = "5ombr4",
		passwd = "Contraseña_random",
		database = "prueba"
)

print (db)

cursor = db.cursor()
cursor.execute ("INSERT INTO prueba.Gente(Nombre, Edad, Ciudad) VALUES ('5ombr4', 34, 'Almafuerte'), ('Max', 29, 'Guadalajara'), ('Cynthia', 38, 'Sidney')")

# Esta línea es de suma importancia si queremos realizar cambios en la base de datos:
db.commit()

Leer datos:

Dado que ya ingresamos nuestros primeros datos a la base, naturalmente vamos a proseguir con la lectura e impresión de los mismos:

import mysql.connector as mysql
from mysql.connector import Error

db = mysql.connect(
		host = "localhost",
		user = "5ombr4",
		passwd = "Contraseña_random",
		database = "prueba"
)

print (db)

cursor = db.cursor()
#Podemos guardar nuestra consulta en una variable, lo que será muy útil si el dato por el cual necesitamos buscar en la base no es estático:
sql_statemeent = "SELECT * FROM Gente"

cursor.execute(sql_statement)
output = cursor.fetchall()
# Como vimos arriba, capturamos la devolción de la consulta en una lista.

for x in output:
	print(x)

Actualizar datos:

Como habrán notado, trabajar con bases de datos en Python es muy sencillo. El siguiente punto es la actualización de datos:

import mysql.connector as mysql
from mysql.connector import Error

db = mysql.connect(
		host = "localhost",
		user = "5ombr4",
		passwd = "Contraseña_random",
		database = "prueba"
)

print (db)

cursor = db.cursor()
cursor.execute ("UPDATE Gente SET Age='39' WHERE Ciudad='Sidney'")

db.commit()

Eliminar fila:

Para finalizar con la lección, vamos a ver como se elimina una fila de datos:

import mysql.connector as mysql
from mysql.connector import Error

db = mysql.connect(
		host = "localhost",
		user = "5ombr4",
		passwd = "Contraseña_random",
		database = "prueba"
)

print (db)

cursor = db.cursor()
cursor.execute ("DELETE FROM Gente WHERE City='México'")

db.commit()

<Tema anterior - Tema siguiente>

1 me gusta