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-

Notas de Ayuda para Flask (Curso Básico)

ISC & CodeNoSchool

Curso de Otoño, 2017

Tutor: Jessy Kizlex Martz

Email: [email protected]

CURSO BÁSICO FLASK
HTTP

___

Notas de ayuda para el curso.

¿Qué es el protocolo HTTP?

Hypertext Transfer Protocol o HTTP es el protocolo de comunicación que permite las transferencias de información en la World Wide Web. HTTP fue desarrollado por el World Wide Web Consortium y la Internet Engineering Task Force, colaboración que culminó en 1999 con la publicación de una serie de RFC, el más importante de ellos es el RFC 2616 que especifica la versión 1.1. HTTP define la sintaxis y la semántica que utilizan los elementos de software de la arquitectura web para comunicarse. (Wikipedia)

  • El protocolo HTTP usa varios verbos para comunicarse:
    • GET
    • POST
    • PUT
    • DELETE

De los cuales los más populares son GET y POST, pues GET se utiliza para obtener algún recurso del servidor accediendo a través de una URI/URL y POST para enviar datos, por ejemplo, para utilizar GET basta con acceder a una página web estándar, y para utilizar POST puedes utilizar un formulario de registro de usuario.

Comunicación cliente-servidor

  • Esta comunicación se basa principalmente en dos cosas:
    • Petición
    • Respuesta

¿A qué nos referimos con petición y respuesta en este contexto?

Puedes utilizar la definición literal de estas palabras, y entenderlo mejor con la información que se presenta a continuación.

¿Cómo funcionan las peticiones y respuestas?

Normalmente el cliente es quién envía una petición y el servidor quién provee una respuesta. Por ejemplo, cuando accedemos a una página como https://codenoschool.vivaldi.net/ estamos mandando una petición a través del protocolo HTTP utilizando el verbo GET para que el servidor nos provea una respuesta, esta respuesta da como resultado el poder visualizar los elementos que pertenecen a la página que estamos accediendo.

Las peticiones poseen ciertas características además de los verbos que utilizan para que estas se comporten de una manera u otra, a estas características se les conocen como cabeceras y en ellas va información que utilizará el servidor para saber cómo gestionar la petición y dar una respuesta específica, por ejemplo: Host, User-Agent, Accept-Language, Cookie, Content-Type, entre muchas otras. Además tienen en algunas ocasiones poseen un cuerpo y es allí donde se indican las acciones que realizará la petición (dependiendo de que se trate, a veces puede no llevar cuerpo).

Al igual que las peticiones, las respuestas se comportan de la misma manera, utilizando cabeceras para dar información acerca de la respuesta que se está dando y de esa manera quién la reciba pueda interpretar el contenido de la misma y obtener la información y/o datos.

Estado de las peticiones.

Se le asigna un estado a cada petición dependiendo del resultado de la misma, dos de los más conocidos son el estado 200 y 404, siendo el 200 una petición exitosa (OK), y 404 el estado para una petición que no encontró el recurso que estaba buscando (Error). Pero existen una lista de estos estados, que puedes consultar aquí: Anexo:Códigos de estado HTTP.

¿Dónde se pueden aplicar estos conceptos?

A diario nos relacionamos con ellos al navegador por Internet incluso sin darnos cuenta, pero si estás estudiando programación y te has interesado por el desarrollo web estos son algunos de los conceptos más comunes que encontrarás a la hora de aprender a desarrollar aplicaciones web.

Para aprender a construir un sitio web dinámico completo debes aprender a gestionar el área cliente-servidor (frontend-backend), ¿Cómo? ¿Necesitas más información? Te invitamos a que formes parte del: Curso de Desarrollo Web Gratuito de Flask (Python). Aprenderás mucho, no te arrepentirás, te esperamos!

 

¿Necesitas esta información? Puedes descargar/visualizar el documento aquí: Ayuda para Flask (Curso Básico)