Integración de SQLAlchemy en Flask para Bases de Datos
Clase 6 de 18 • Curso de Flask
Resumen
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.x
Flask-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 datos
db_filepath = os.path.join(os.path.dirname(__file__), 'notes.sqlite')
# Configuración de SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{db_filepath}'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# Instancia de SQLAlchemy
db = 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:
class Note(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.String(200), nullable=False)
def __repr__(self):
return f'Note {self.id}: {self.title}'
En este modelo:
id
: Es un entero que actúa como clave primariatitle
: Es una cadena de texto con longitud máxima de 100 caracteres y no puede ser nulacontent
: 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.