Conexiones a bases de datos con MySQL y MariaDB
Cita con formato IEEE:
E. Bahit, "Conexiones a
bases de datos con MySQL® y MariaDB", in Python
Aplicado, 4th ed., EBRC Publisher, 2022, pp. 245-257.
Cita con formato APA 7:
Bahit, E. (2022).
Conexiones a bases de datos con MySQL® y MariaDB. In
Python Aplicado (4th ed., pp. 245-257). EBRC
Publisher.
Cita en línea:
(Bahit, 2022)
Para trabajar con bases de datos, en todo lenguaje se deben reunir dos requisitos:
- Un servidor de bases de datos (como MySQL®, MariaDB, PostgreSQL, entre otros).
- Un conector de base de datos para el lenguaje, que es el que permitirá al lenguaje interactuar con la base de datos.
Tener en cuenta que MariaDB es un fork de MySQL®. Por lo tanto, si se tiene por costumbre utilizar MySQL®, probablemente no se noten diferencias utilizando MariaDB.
En el caso de MySQL® existe un conector desarrollado por el fabricante, denominado MySQL Connector/Python. Se trata de una biblioteca privativa, no libre. Una versión libre con licencia GPL v3.0 es la biblioteca python-MySQLdb. Esta biblioteca sirve no solo para conexiones MySQL® sino también a MariaDB.
Recientemente en Junio de 2020, MariaDB lanzó su propio conector para Python, MariaDB Connector/Python. Hasta tanto transcurra el tiempo suficiente para considerarlo estable se recomienda utilizar MySQLdb. No obstante, se sugiere estudiarlo con la documentación oficial y mantenerse al día en cuanto a su avance.
Los paquetes a instalar tanto para Debian como para Fedora y distribuciones derivadas de ambos, son los siguientes:
-
mariadb-server
-
python3-mysqldb
Configuración y administración de MariaDB
Como usuario root, conectarse vía Shell a MariaDB:
# mariadb -u root
El objetivo es crear un usuario nuevo con permisos para crear bases de datos, y que pueda conectarse desde los scripts CGI:
CREATE USER <nombre> IDENTIFIED BY '<clave>'; GRANT ALL PRIVILEGES ON *.* TO <nombre>;
<nombre>
y <clave>
pueden ser
cualquier cadena de texto que se desee, por ejemplo, el usuario
eugenia
con la clave secret
:
CREATE USER eugenia IDENTIFIED BY 'secret'; GRANT ALL PRIVILEGES ON *.* TO eugenia;
A partir de aquí, es posible entrar al administrador de MariaDB con el nuevo usuario (y sin necesidad de hacerlo con el usuario root del sistema), y crear la nueva base de datos. La conexión (ahora con clave) se realizará con la instrucción:
$ mariadb -u eugenia -psecret
Y para crear una nueva base de datos se ejecutará:
CREATE DATABASE <nombre>;
Donde <nombre>
será el que se le quiera dar a la
nueva base de datos. Por ejemplo, nueva_db
:
CREATE DATABASE nueva_db;
Algunas sentencias SQL para gestionar las bases de datos, y que podrían ser útiles de recordar, se describen en la siguiente tabla:
Objetivo | Sentencia |
---|---|
Crear base de datos | CREATE DATABASE <nombre>; |
Ver todas las bases de datos | SHOW DATABASES; |
Eliminar base de datos | DROP DATABASE <nombre>; |
Elegir una base de datos | USE <nombre> |
Crear una tabla con el motor InnoDB (para bases de datos relacionales) |
CREATE TABLE <nombre> ( |
Ver todas las tablas de una base de datos | SHOW TABLES; |
Ver la estructura de una tabla | DESCRIBE <tabla>; |
Eliminar una tabla | DROP TABLE <nombre>; |
Crear usuario | CREATE USER <nombre> |
La lista completa [de sentencias SQL para gestión de bases de datos] puede verse en la documentación oficial de MariaDB y en la de MySQL®:
- Sentencias SQL para gestión de bases de datos MariaDB
- Lista completa de sentencias SQL para gestión de bases de datos MySQL®
Trabajando con MariaDB y MySQL® desde Python
Teniendo el servidor de bases de datos y el conector correspondiente instalados, el acceso y consulta a bases de datos se realizará importando el conector:
from MySQLdb import connect
Para entender cómo funciona el acceso y consulta a una base de datos independientemente del servidor y del lenguaje, considerar que los pasos a seguir siempre serán los mismos:
- Abrir la conexión a la base de
datos. Esto implica: conectarse a un host,
autenticarse con un usuario y contraseña en el servidor de base de
datos, y elegir la base de datos sobre la cual trabajar. La apertura
de la conexión, la autenticación y la selección de la base de datos,
suelen ser tres operaciones para las que los conectores ofrecen una
sola que los ejecuta. En algunos lenguajes, pueden llevarse a cabo en
tres operaciones independientes.
Por otra parte, esta conexión abierta al comienzo es como un programa que se abre: necesita cerrarse al finalizar el trabajo. - Abrir un cursor. Un cursor es una operación que se abre dentro de la conexión establecida, con la finalidad de almacenar los resultados devueltos por una consulta. Al igual que en el caso anterior, todo aquello que se abre debe cerrarse al finalizar el proceso.
- Ejecutar una consulta. Una consulta es la sentencia SQL que será ejecutada sobre la base de datos especificada.
- Confirmar cambios. Esta operación se realiza
cuando se ejecutan instrucciones de escritura como
INSERT
,UPDATE
oDELETE
, entre otras. - Recuperar los resultados de una consulta. Esta
operación se realiza cuando se ejecutan consultas de lectura como
SELECT
,SHOW
oDESCRIBE
, entre otras. - Cerrar el cursor abierto.
- Cerrar la conexión abierta.
El siguiente diagrama de flujo (flowchart) puede ayudar a memorizar y entender las operaciones necesarias para escribir el código fuente de funciones de manejo de bases de datos en cualquier lenguaje y para cualquier servidor:
[DIAGRAMA DE FLUJO NO DISPONIBLE EN LA VERSIÓN DEMO]
Cada una de estas operaciones tienen un nombre específico en Python, definido en las PEP 24922. Sus nombres se describen en la siguiente tabla.
Operación | Nombre en Python |
---|---|
Abrir conexión | connect |
Abrir cursor | cursor |
Ejecutar consulta | execute |
Confirmar cambios | commit |
Recuperar resultados (todos) | fetchall |
Cerrar cursor | (connect) close |
Cerrar conexión | (cursor) close |
Cada una de estas operación será implementada según el conector elegido. En el caso de MySQLdb®, la implementación se realiza como se indica a continuación.