Conectar una base de datos a una aplicación de Flask (MySQL, SQLite, PostgreSQL)

Para ser capaz de conectar una base de datos a una aplicación de Flask podemos seguir diferentes instrucciones basándonos en diferentes herramientas. En este ejemplo, se utilizará la librería de flask_sqlalchemy la cuál puedes instalar en tu entorno virtual de Python.

Recordemos que esta es una entrada de blog para ayudar a las personas que siguen los cursos referentes a Flask en el canal de ISC School o CodeNoSchool, por lo cual sólo se mencionará lo absolutamente necesario para acabar de entender algún tema “suelto” que se haya tratado durante algún vídeo-tutorial/curso, por lo cual si has encontrado esta entrada sin seguir alguno de estos cursos y tienes algún duda te invito a seguir los cursos/vídeos. Puedes ver los enlaces al final de esta misma entrada.

¿Cómo establezco una URI para conectarme a la base de datos?

El framework de Flask esta basado en el lenguaje de programación de Python por lo cual podemos utilizar las diferentes funciones que este proporciona para construir una URI con cual nos conectaremos a la base de datos.

Hay tres cosas que debes de tener en cuenta:

  1. ¿Qué conector utilizarás?
  2. ¿Cuál es la ruta/dirección a la base de datos?
  3. ¿Cuáles son los datos para la URI de conexión a la base de datos?
  4. ¿Cómo utilizar la base de datos en la aplicación de Flask?
  5. ¿Cómo crear las tablas y columnas de la base de datos?

¿Qué conector o extensión se debe utilizar para conectarse a una base datos?

  • Primero, ¿qué conector debo utilizar?

El conector es una parte muy importante de la URI para realizar la conexión a la base de datos, y se utiliza uno diferente según sea el caso.

# SQLite3 (El más fácil):

sqlite:///
# MySQL/MariaDB (El más común) *:

mysql+mysqlconnector://
# PostgreSQL *:

postgresql+psycopg2://

Tendrás que ser bastante cuidadoso con el número de diagonales que utiliza cada conector.

* Nota: Observa que MySQL/MariaDB y PostgreSQL necesitan necesitan un módulo adicional para funcionar, y los puedes instalar en tu entorno virtual de Python a través de pip de la siguiente manera:

Para MySQL:

pip install mysql_connector flask_sqlalchemy
Para PostgreSQL:

pip install psycopg2 flask_sqlalchem

¿Cómo configurar una ruta hacía la base de datos?

  • Segundo, ¿cómo obtengo de manera correcta una ruta absoluta?

Este paso solo es necesario para configurar una base de datos con SQLite.

Lo más común es que con SQLite necesitemos la ruta absoluta a nuestra base de datos, establecerla es bastante sencillo si conocemos nuestro sistema operativo, pero puedes seguir estás instrucciones para recuperar una ruta absoluta de un archivo a través de Python y que ésta tengo toda la compatibilidad sin importar el sistema operativo en el que te encuentres, pues recordemos que Windows utiliza diagonales inversas y Linux solo diagonales normales.

import os
BASE_DIR =  os.path.abspath(os.path.dirname(__file__))
DB_URI = "sqlite:///" + os.path.join(BASE_DIR, "database.db")

Siendo “database.db” el nombre del archivo de la base de datos. De esa manera, DB_URI es la URI completa para conectar una base de datos de SQLite a tu aplicación de Flask.

¿Cómo configurar una URI de conexión a una base de datos?

  • Tercero, ¿cuál es la URI completa para apuntar a una base de datos?

Ya desde el punto anterior puedes observar una URI completa para SQLite pero aquí te vuelvo a colocar ese y los casos para MySQL/MariaDB y/o PostgreSQL.

# SQLite3:

import os
BASE_DIR =  os.path.abspath(os.path.dirname(__file__))
DB_URI = "sqlite:///" + os.path.join(BASE_DIR, "database.db")
# MySQL/MariaDB:

DB_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(username="", password="", hostname="", databasename="")
# PostgreSQL:

DB_URI = "postgresql+psycopg2://{username}:{password}@{hostname}/{databasename}".format(username="", password="", hostname="", databasename="")

No te olvides de asignar los valores correctos según sea tu caso para las diferentes variables que se están considerando.

¿Cómo utilizar una base de datos en una aplicación de Flask?

  • Cuarto (a): ¿Cómo le indico a mi aplicación de Flask que utilizará una base de datos?

Como se menciono al principio de esta entrada, lo que se utilizará para manejar la base de datos a través de la aplicación de Flask es la librería flask_sqlalchemy, así que es a esta librería a la que le debemos de indicar nuestra URI de conexión. Para ello utilizamos los parámetros de configuración de nuestra aplicación:

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
  • Cuarto (b): ¿Cómo utilizo la base de datos en una aplicación de Flask?

Está información se sale del tema principal pero a grandes rasgos lo que debes hacer es crear el objeto de la base de datos:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)

Crear un esquema a partir de clases de Python, y después aplicar ese esquema a la base de datos.

¿Cómo crear las tablas y columnas de una base de datos de Flask SQLAlchemy?

  • Quinto, ¿Cómo crear los modelos de la base de datos?

Simplemente debes asegurarte de has creado un entorno virtual de Python, e instalado allí los paquetes de flask, flask_sqlalchemy, y algún módulo para instalar la extensión de conexión (conector) si es necesario (ya sea para mysql/mariadb o postgresql). Una vez que haz activado dicho entorno virtual podrás ejecutar el siguiente comando: “flask shell”. Ello iniciará una sesión interactiva con un contexto de aplicación de Flask, que será necesario para crear las tablas y columnas de los modelos que se hayan definido para la aplicación.

Dentro de la sesión interactiva de Flask (el resultado de ejecutar “flask shell”) se deberá ejecutar el siguiente comando:

>>> db.create_all()

Los signos de “>>>” indican que se está dentro de la sesión interactiva de Flask/Python, y no deben de ser escritos.

Final!

Y listo, a partir de allí sólo queda que utilizar la base de datos y todas sus operaciones a través de la aplicación de Flask.

Para más información y ver el proceso a detalle puedes observar los siguientes cursos y los vídeos que correspondan a base de datos:

Curso de Flask: https://www.youtube.com/playlist?list=PLBO4apWPK7b7K6c-jpEI0zflZYDjVp7cd

Curso de REST APIs: https://www.youtube.com/playlist?list=PLBO4apWPK7b6tRI_B1MQGZfvI6c3ViQd-

Leave a Reply

Your email address will not be published. Required fields are marked *