Conectar Flask a SQLite con SQLAlchemy

Resumen

Conectar Flask con SQLite usando SQLAlchemy te permite guardar datos persistentes sin escribir SQL manual. Esta guía te muestra cómo instalar la librería, configurar la base de datos y crear tu primer modelo de notas en Python, ideal para quienes empiezan con desarrollo backend en Flask.

La magia ocurre gracias al ORM (Object Relational Mapper), que traduce tus clases de Python en tablas de base de datos. Tú escribes Python, y SQLAlchemy se encarga de generar las queries SQL por debajo.

¿Qué es SQLAlchemy y por qué usarlo en Flask?

SQLAlchemy es la librería que actúa como puente entre tu aplicación Flask y motores de bases de datos como SQLite, MySQL o Postgres. Cada tabla se convierte en una clase de Python, y cada fila en un objeto que puedes manipular con métodos.

¿Qué es un ORM? Es una capa que traduce clases de Python a tablas SQL. Tú trabajas con objetos, y la librería genera las consultas automáticamente, devolviéndote los resultados como instancias de Python.

La ventaja práctica: aprendes solo Python y olvidas la sintaxis específica de cada motor de base de datos.

¿Cómo instalo flask-sqlalchemy en mi proyecto?

Antes de instalar nada, activa tu entorno virtual. Es un paso que muchos olvidan y termina contaminando dependencias globales [00:48].

  • Activa el entorno virtual desde la terminal.
  • Ejecuta pip install flask-sqlalchemy para descargar la librería.
  • Crea un archivo requirements.txt con tus dependencias.
  • Usa pip freeze | grep Flask para encontrar las versiones exactas instaladas.

El archivo requirements.txt es tu seguro de vida: cualquier persona que clone tu proyecto podrá instalar las mismas versiones que ya funcionan en tu máquina.

¿Cómo configurar SQLite en una aplicación Flask?

SQLite es una base de datos basada en archivos, lo que significa que toda tu información vive en un solo archivo .sqlite dentro del proyecto. No necesitas levantar un servidor aparte [02:45].

En tu app.py debes importar os para construir rutas dinámicas y definir dónde vivirá ese archivo:

python import os from flask_sqlalchemy import SQLAlchemy

DB_FILE_PATH = os.path.join(os.path.dirname(file), 'notes.sqlite')

app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_FILE_PATH}' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

La configuración SQLALCHEMY_TRACK_MODIFICATIONS en False evita que SQLAlchemy llene tus logs con información innecesaria. En producción esto sí puede ser útil para auditar cambios, pero para aprender solo estorba.

¿Por qué se usa el prefijo SQLALCHEMY_ en config? Porque la clase SQLAlchemy recorre automáticamente el diccionario app.config y toma todas las claves con ese prefijo como parámetros propios.

La variable db será tu puerta de entrada a la base de datos: con ella harás inserciones, consultas y modificaciones a lo largo de todo el proyecto.

¿Cómo crear un modelo en SQLAlchemy?

Un modelo es una clase de Python que hereda de db.Model y representa una tabla. Cada atributo de la clase corresponde a una columna [05:30].

Para la app de notas, defines tres campos: un identificador único, un título y un contenido.

python 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}'

Algunos detalles que vale la pena entender:

  • El primary key es el identificador único de cada fila y permite relacionar tablas entre sí.
  • El parámetro nullable=False convierte el campo en obligatorio.
  • El número dentro de String(100) define el máximo de caracteres permitidos.
  • El método __repr__ define cómo se imprime el objeto en consola, útil al depurar.

¿Cómo crear las tablas con Flask Shell?

Definir el modelo no crea la tabla automáticamente. Necesitas ejecutar un comando para que SQLAlchemy genere el archivo y la estructura interna.

Aquí entra flask shell, un comando que abre una consola interactiva de Python con tu aplicación ya cargada [07:10]:

  1. Activa el entorno virtual en la terminal.
  2. Ejecuta flask shell.
  3. Importa la base de datos con from app import db.
  4. Ejecuta db.create_all() para generar las tablas.

Después de esto, el archivo notes.sqlite aparece en tu carpeta del proyecto. Para verificar que la tabla existe, puedes usar el comando sqlite3 notes.sqlite desde la terminal y ejecutar .schema para ver la estructura.

¿Qué hace flask shell? Inicia una sesión interactiva de Python con el contexto de tu app Flask cargado, permitiéndote ejecutar comandos como crear tablas, importar modelos o probar consultas sin levantar el servidor.

Un truco útil: para entornos de prueba puedes nombrar el archivo distinto, así puedes borrarlo sin miedo. En producción, mantén un nombre estable que nunca debas tocar manualmente.

¿Qué otros motores son compatibles con SQLAlchemy?

Aunque aquí usamos SQLite por su simplicidad, la misma configuración funciona con MySQL y Postgres cambiando solo la URI de conexión. Esto significa que puedes empezar tu proyecto en local con SQLite y migrar a un motor más robusto sin reescribir tu lógica de modelos.

Como reto, agrega un campo created_at a tu modelo Note para guardar la fecha de creación. Te será útil para mostrar cuánto tiempo lleva existiendo cada nota dentro de tu aplicación. ¿Cómo lo resolverías? Cuéntame en los comentarios.