Programación Back-End

Unidad 3: API RESTful con Integración de Base de Datos

El motor de base de datos

Redactado por Criz
Publicado el 20 de julio de 2024 a las 21:26
Última actualización el 20 de julio de 2024 a las 21:26

Acciones rapidas
Editar
Siguiente
Previo

Motor de base de datos MySQL

SQLite va bien, pero para el mundo de las APIs y otras tareas no es lo mejor. Por ello, hoy toca aprender a usar un motor de base de datos como MySQL.

Los tópicos de hoy son:

El proveedor MySQL

Para el curso, podemos usar servicios que proveen de una base de datos MySQL. Para ello, utilizaremos WampServer, un software que provee PHP, Apache y base de datos MySQL. Con un panel de control incluido llamado phpMyAdmin, el cual va muy bien (y seguro te lo encontraras en entornos de producción).

Para ello descargamos WampServer (o XAMPP si lo prefieres):

  1. Vamos a la página de descarga de WampServer (o descarga de XAMPP)
  2. Descargamos la última versión disponible.
  3. Al descargar, instálalo.
  4. Y listo. Si se inicia, ciérralo y luego ejecuta lo con permisos de administrador.

En XAMPP hay que explícitamente iniciar el servicio MySQL. En WampServer se inician todos automáticamente.

Una vez instalado, y en ejecución, podremos acceder al panel de control de la base de datos http://localhost/phpmyadmin/.

Creación de la base de datos

Usaremos el panel de control phpMyAdmin para crear una nueva base de datos, en donde nuestro proyecto creara las tablas correspondientes a cada modelo creado en nuestras aplicaciones de nuestro proyecto Django.

Tambien puedes usar la consola mysql, pero es más dificultoso.

Para ello, ingresamos a http://localhost/phpmyadmin/ y las credenciales son:

Una vez en la página principal de phpMyAdmin, creamos una nueva base de datos:

  1. En el menú lateral izquierdo, clicamos en "Nueva".
  2. Le damos un nombre a la base de datos, en mi caso proyecto_django.
  3. Indicamos la codificación que usaremos, se recomienda usar utf8mb4_general_ci.
  4. Clicamos en el botón "Crear".

Y eso es todo. Ya tenemos nuestra base de datos proyecto_django creada.

Configuración de base de datos MySQL en Django

Antes, es necesario instalar una librería que permite a Django usar el backend.mysql.
Tenemos 2 opciones:

  1. mysqlclient
  2. pymysql

La recomendación es usar PyMySQL porque funciona muy bien y no tendrás problemas en entornos de producción.

Para ello, debemos usar pip. Iniciamos una instancia PowerShell, abrimos el entorno virtual de Python y ejecutamos el comando:
pip install pymysql
Al instalarse, nos vamos a settings.py y agregamos las siguientes líneas.

1
2
import pymysql
pymysql.install_as_MySQLdb()

La recomendación es ingresar esas líneas de código antes de la variable DATABASES.

Ahora sí, para que nuestro proyecto Django pueda comunicarse con nuestra instancia mysql del software que hayamos elegido, debemos configurarlo dentro de settings.py.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
...
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "proyecto_django", # 👈 el nombre que le hemos puesto a la bd
        "USER": "root",
        "PASSWORD": "",
        "HOST": "localhost", # host local
        "PORT": "3306", # puerto comun del proceso mysql
    }
}
...

Migración

Es importante entender que la migración solo genera las tablas para los modelos, no copia los registros de nuestro antiguo motor de base de datos al nuevo.
Entendido eso, para realizar la migración, basta con ejecutar el siguiente comando en la consola PowerShell:
py manage.py migrate
Ahora, podremos observar en phpMyAdmin que se han generado correctamente las tablas.

Habitando la nueva base de datos

Si tienes datos en la base de datos anterior, seguro querrás copiar esos registros a la nueva base de datos.
Para lograrlo, podemos usar DB Browser para abrir el archivo de base de datos db.sqlite3 y luego exportar los registros.

  1. Vamos a Archivo > Exportar > Base de datos a archivo SQL...
  2. Luego seleccionamos las tablas que queremos exportar. Yo solo seleccionare la tabla tienda_producto.
  3. Desmarcamos la opción "Mantener el nombre de la columna en INSERT INTO"
  4. Desmarcamos la opción "Múltiples líneas (VALUES) en cada sentencia INSERT"
  5. Luego, seleccionamos "Exportar solo los datos"
  6. Finalmente, clicamos en "Save" y le indicamos una ruta y nombre al archivo.

Nos exportará un archivo que tendrá el siguiente contenido:

1
2
3
4
5
6
BEGIN TRANSACTION;
INSERT INTO "tienda_producto" VALUES (1,'filorte','Un pico de este porte','Muy grande',4,15000,'2024-05-24 05:14:33.560974','2024-05-24 05:14:33.560974');
INSERT INTO "tienda_producto" VALUES (2,'martillo-de-cristal','Martillo de cristal','Martillo de cristal de 3 golpes',8,12000,'2024-05-24 05:14:33.560974','2024-05-24 05:14:33.560974');
INSERT INTO "tienda_producto" VALUES (3,'pila-de-corriente-alterna','Bateria AC','Bateria tipo pila de 12V AC',19,2790,'2024-05-24 05:14:33.560974','2024-05-24 05:14:33.560974');
INSERT INTO "tienda_producto" VALUES (4,'hoyo-de-tarugo','hoyo de tarugo','tamaño estándar',10,800,'2024-05-24 05:15:32.313524','2024-05-24 05:15:32.313524');
COMMIT;

Tenemos que hacerles unos cambios a las sentencias, ya que phpMyAdmin no las aceptara tal cual.
Primero, quitamos el BEGIN TRANSACTION; y el COMMIT;
Luego, quitamos las doble comillas del nombre de la tabla.
Tal que se vea asi:

1
2
3
4
INSERT INTO tienda_producto VALUES (1,'filorte','Un pico de este porte','Muy grande',4,15000,'2024-05-24 05:14:33.560974','2024-05-24 05:14:33.560974');
INSERT INTO tienda_producto VALUES (2,'martillo-de-cristal','Martillo de cristal','Martillo de cristal de 3 golpes',8,12000,'2024-05-24 05:14:33.560974','2024-05-24 05:14:33.560974');
INSERT INTO tienda_producto VALUES (3,'pila-de-corriente-alterna','Bateria AC','Bateria tipo pila de 12V AC',19,2790,'2024-05-24 05:14:33.560974','2024-05-24 05:14:33.560974');
INSERT INTO tienda_producto VALUES (4,'hoyo-de-tarugo','hoyo de tarugo','tamaño estándar',10,800,'2024-05-24 05:15:32.313524','2024-05-24 05:15:32.313524');

Para ejecutar los comandos SQL, nos vamos a phpMyAdmin.

  1. Clicamos en nuestra base de datos proyecto_django.
  2. Clicamos en la sección SQL.
  3. Luego, pegamos las sentencias SQL generadas y modificadas.
  4. Clicamos el botón "Continuar" o presionamos CTRL+ENTER.

Y eso es todo, si clicamos en la tabla tienda_productos dentro de nuestra base de datos proyecto_django en phpMyAdmin, podremos ver que los inserts se han ejecutado y los registros estan guardados.

Tambien podemos hacer la exportación con archivos CSV con la sección Importar de phpMyAdmin, pero es algo más complejo. Te invitamos a investigar.


Siguiente
Previo