La integración de bases de datos en aplicaciones Flask representa un paso fundamental para desarrollar soluciones web robustas y escalables. SQL Alchemy se posiciona como una herramienta poderosa que permite a los desarrolladores Python interactuar con bases de datos relacionales sin necesidad de dominar completamente el lenguaje SQL, gracias a su implementación de ORM (Object-Relational Mapping). Este enfoque no solo simplifica el desarrollo, sino que también mejora la mantenibilidad del código al trabajar con objetos Python en lugar de consultas SQL directas.
¿Cómo integrar una base de datos SQLite en una aplicación Flask?
Para integrar una base de datos en nuestra aplicación Flask, utilizaremos Flask-SQLAlchemy, una extensión que facilita el uso de SQLAlchemy con Flask. Esta librería nos permite relacionar tablas de la base de datos con modelos o clases de Python, implementando el patrón ORM (Object-Relational Mapping).
El primer paso es instalar la librería necesaria. Abrimos la terminal, activamos nuestro entorno virtual y ejecutamos:
pip install flask-sqlalchemy
Una vez instalada la librería, es recomendable crear un archivo requirements.txt para documentar las dependencias del proyecto:
Flask==2.x.xFlask-SQLAlchemy==3.x.x
Para verificar que la instalación fue exitosa, podemos utilizar el comando flask shell que nos proporciona una consola interactiva con nuestra aplicación cargada:
from flask_sqlalchemy import SQLAlchemy
Si no aparece ningún error, significa que la librería está correctamente instalada.
Configuración de la base de datos en Flask
Para configurar nuestra base de datos SQLite, necesitamos modificar nuestro archivo principal de la aplicación (app.py):
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)# Configuración de la ruta del archivo de base de datosdb_filepath = os.path.join(os.path.dirname(__file__),'notes.sqlite')# Configuración de SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI']=f'sqlite:///{db_filepath}'app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False# Instancia de SQLAlchemydb = SQLAlchemy(app)
En este código:
Importamos la librería os para manejar rutas de archivos
Definimos la ruta donde se creará el archivo SQLite
Configuramos la URI de la base de datos con el formato requerido por SQLAlchemy
Desactivamos el seguimiento de modificaciones para reducir la verbosidad de los logs
Creamos una instancia de SQLAlchemy vinculada a nuestra aplicación
Es importante destacar que SQLAlchemy es compatible con múltiples motores de bases de datos como MySQL o PostgreSQL, no solo con SQLite.
¿Cómo crear modelos y tablas con SQLAlchemy?
Los modelos en SQLAlchemy son clases de Python que representan tablas en la base de datos. Cada atributo de la clase corresponde a una columna en la tabla.
Para nuestro ejemplo, crearemos un modelo Note para almacenar notas con título y contenido:
title: Es una cadena de texto con longitud máxima de 100 caracteres y no puede ser nula
content: Es una cadena de texto con longitud máxima de 200 caracteres y tampoco puede ser nula
El método __repr__ define cómo se mostrará el objeto cuando se imprima
Creación de las tablas en la base de datos
Una vez definido el modelo, necesitamos crear las tablas correspondientes en la base de datos. Para esto, utilizamos el método create_all() de SQLAlchemy:
flask shell
Y dentro de la consola interactiva:
from app import db
db.create_all()
Este comando creará el archivo notes.sqlite con la tabla note según la estructura definida en nuestro modelo.
Verificación de la estructura de la base de datos
Para verificar que la tabla se ha creado correctamente, podemos utilizar la herramienta de línea de comandos de SQLite:
sqlite3 notes.sqlite
Y dentro de la consola de SQLite:
.schema
Este comando nos mostrará la estructura de la tabla note con sus columnas id, title y content, confirmando que se ha creado correctamente según nuestro modelo.
¿Qué ventajas ofrece el uso de ORM en aplicaciones Flask?
El uso de ORM (Object-Relational Mapping) como SQLAlchemy en aplicaciones Flask ofrece numerosas ventajas:
Abstracción de la base de datos: Permite trabajar con objetos Python en lugar de consultas SQL directas
Portabilidad: Facilita el cambio entre diferentes motores de bases de datos sin modificar el código
Seguridad: Ayuda a prevenir ataques de inyección SQL al manejar automáticamente el escapado de caracteres
Productividad: Reduce la cantidad de código necesario para interactuar con la base de datos
Mantenibilidad: El código es más legible y fácil de mantener al trabajar con objetos y métodos
El uso de modelos en SQLAlchemy también facilita la evolución del esquema de la base de datos a medida que la aplicación crece, permitiendo agregar nuevos campos o relaciones de manera sencilla.
La integración de bases de datos en aplicaciones Flask mediante SQLAlchemy representa un paso fundamental en el desarrollo de aplicaciones web robustas. Esta aproximación nos permite centrarnos en la lógica de negocio mientras el ORM se encarga de la comunicación con la base de datos, resultando en un código más limpio, mantenible y seguro. ¿Has utilizado ORM en tus proyectos? Comparte tu experiencia en los comentarios.
Si quieren pasar sus requerimientos directo a un archivo pueden hacer
pip freeze > requirements.txt
Crea el archivo y le pasa todos los requerimientos.
Lo feo de hacer de ese modo es que le instala todo los paquetes que tenga de dependecia si solo quiere los dos unicas que instalo seria algo asi pip freeze | grep Flask > requirements.txt
Venía a poner justo ese comando. Gracias. 😅
Algo que comparto y que aprendí al leer la documentación de flask_sqlalchemy y ver esta clase es que hay 3 formas de crear la base de datos y las tablas.
Usando el método app_context()
# Esta línea de código la agregamos después de definir los modelos o tablas de las base de datos.with app.app_context(): db.create_all()
Usando el comando flask shell
# Esta forma es especial ya que implícitamente flask ya sabe que app está siendo usanda.from app import db
db.create_all()
Usando el comando flask --app main.py shell
# Esta forma me parece la mejor ya que aquí definimos explícitamente la app que estamos usando para la app.db.create_all() # ya no importamos db ya que flask ya que app está usando para crear el contexto de la aplicaicón.
Tuve que instalar sqlite3 y agregarlo a las variables de entorno , algo que no comentan, pero todo funciona bien
Claro, cuando estamos usando esa base de datos se requiere ese ejecutable. gracias por compartir.
MINUTO 11:50
a mi me pasó igual, para entrar a SQLITE3 toca tenerlo instalado.
Desde WSL: puedes instalar fácilmente desde la terminal con:
sudo apt install sqlite3
Obtener requirements.txt filtrando resultado de Flask en Powershell (Windows):
Para modificar el modelo en el código y que eso se vea reflejado en la base de datos debemos crear una nueva migración del objeto dentro de la base de datos luego de haber modificado la clase “note”.
Para eso deberíamos importar un nuevo módulo a nuestro código que se llama Flask-Migrate
pip install Flask-Migrate
y dentro del código agregar:
from flask_migrate import Migrate
...db = SQLAlchemy(app)# Agregamos la funcion migrar y la base de datos a la appmigrate = Migrate(app, db)...
Con eso solo resta iniciar la primera migración en la línea de comandos:
> flask db init
> flask db migrate -m "Initial migration."
y luego hacer el update de la Base de Datos:
> flask db update
En windows no funciona el comando "grep" porque no es una terminal bash como el instructor la tiene en Mac. Se puede poner en la terminal pip freeze > requirements.txt y aparecerán en el archivo de requirements las versiones de las librerías que se instalaron en el entorno virtual.
Puedes instalar windows subsystem for linux y agregar una distro de Linux como Ubuntu, eso te permitira ejecutar bash shell.
si, sino utilizar en vez de grep, usar findstr
pip freeze | findstr Flask
muy buen curso
✅
no me funciona en la consola el comando sqlite3...
x2
Hay ocasiones que no viene sqlite y hay que instalarlo, usa sudo apt install sqlite3