¿Qué es Flask-SQLAlchemy?
Flask-SQLAlchemy es una extensión para Flask que simplifica el uso de SQLAlchemy, un ORM (Object Relational Mapper) para Python. SQLAlchemy permite interactuar con bases de datos de una manera más intuitiva y orientada a objetos, eliminando la necesidad de escribir consultas SQL manualmente.
Ventajas de usar Flask-SQLAlchemy:
- Abstracción de la base de datos: Permite trabajar con bases de datos utilizando objetos Python en lugar de escribir consultas SQL.
- Compatibilidad con múltiples bases de datos: Soporta varios motores de bases de datos como SQLite, MySQL, PostgreSQL, entre otros.
- Facilidad de uso: Integra perfectamente con Flask, facilitando la configuración y el uso en aplicaciones web.
Instalación de Flask-SQLAlchemy
Para comenzar a usar Flask-SQLAlchemy, primero necesitas instalarlo. Puedes hacerlo utilizando pip
:
Configuración Básica
Paso 1: Configurar la Aplicación Flask
Primero, crea una aplicación Flask y configura la URI de la base de datos. En este ejemplo, usaremos SQLite, una base de datos ligera y fácil de configurar.
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)
Explicación del Código:
app.config['SQLALCHEMY_DATABASE_URI']
: Especifica la URI de la base de datos. En este caso, estamos utilizando SQLite y la base de datos se llamarámydatabase.db
.app.config['SQLALCHEMY_TRACK_MODIFICATIONS']
: Desactiva el seguimiento de modificaciones de objetos, lo cual puede consumir recursos innecesarios.
Paso 2: Definir un Modelo
Un modelo en SQLAlchemy es una clase que representa una tabla en la base de datos. Cada atributo de la clase representa una columna en la tabla.
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return f'<User {self.username}>'
Explicación del Código:
class User(db.Model)
: Define un modelo llamadoUser
que hereda dedb.Model
.id = db.Column(db.Integer, primary_key=True)
: Define una columnaid
que es de tipo entero y es la clave primaria.username = db.Column(db.String(80), unique=True, nullable=False)
: Define una columnausername
que es una cadena de hasta 80 caracteres, debe ser única y no puede ser nula.email = db.Column(db.String(120), unique=True, nullable=False)
: Define una columnaemail
similar ausername
.
Paso 3: Crear la Base de Datos
Para crear la base de datos y las tablas definidas por los modelos, utiliza el siguiente comando en el shell de Python:
Este comando crea todas las tablas definidas en los modelos si no existen.
Ejemplo Completo
Aquí tienes un ejemplo completo que incluye la creación de la aplicación Flask, la configuración de Flask-SQLAlchemy, la definición de un modelo y la creación de la base de datos.
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return f'<User {self.username}>' @app.route('/') def index(): return 'Hello, Flask-SQLAlchemy!' if __name__ == '__main__': db.create_all() app.run(debug=True)
Ejercicio Práctico
Ejercicio 1: Crear un Modelo de Producto
-
Define un modelo
Product
con los siguientes campos:id
: Entero, clave primaria.name
: Cadena de hasta 100 caracteres, único, no nulo.price
: Flotante, no nulo.
-
Configura la aplicación Flask y Flask-SQLAlchemy.
-
Crea la base de datos y la tabla
Product
.
Solución:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), unique=True, nullable=False) price = db.Column(db.Float, nullable=False) def __repr__(self): return f'<Product {self.name}>' if __name__ == '__main__': db.create_all() app.run(debug=True)
Conclusión
En esta lección, hemos aprendido qué es Flask-SQLAlchemy, cómo instalarlo y configurarlo, y cómo definir y crear modelos de base de datos. En el próximo módulo, profundizaremos en la definición de modelos y realizaremos operaciones CRUD (Crear, Leer, Actualizar, Eliminar) con Flask-SQLAlchemy.
Curso de Desarrollo Web con Flask
Módulo 1: Introducción a Flask
- ¿Qué es Flask?
- Configuración de tu Entorno de Desarrollo
- Creando tu Primera Aplicación Flask
- Entendiendo la Estructura de una Aplicación Flask
Módulo 2: Conceptos Básicos de Flask
- Enrutamiento y Mapeo de URLs
- Manejo de Métodos HTTP
- Renderizando Plantillas con Jinja2
- Trabajando con Archivos Estáticos
Módulo 3: Formularios y Entrada de Usuario
Módulo 4: Integración de Bases de Datos
- Introducción a Flask-SQLAlchemy
- Definiendo Modelos
- Realizando Operaciones CRUD
- Migraciones de Base de Datos con Flask-Migrate
Módulo 5: Autenticación de Usuarios
- Registro de Usuarios
- Inicio y Cierre de Sesión de Usuarios
- Hashing de Contraseñas
- Gestión de Sesiones de Usuario
Módulo 6: Conceptos Avanzados de Flask
- Blueprints para Aplicaciones Grandes
- Manejo de Errores
- Páginas de Error Personalizadas
- Registro y Depuración
Módulo 7: APIs RESTful con Flask
- Introducción a las APIs RESTful
- Creación de Endpoints RESTful
- Manejo de Datos JSON
- Autenticación para APIs
Módulo 8: Despliegue y Producción
- Configuración de Flask para Producción
- Despliegue en Heroku
- Despliegue en AWS
- Monitoreo y Optimización del Rendimiento
Módulo 9: Pruebas y Mejores Prácticas
- Pruebas Unitarias con Flask
- Pruebas de Integración
- Cobertura de Pruebas
- Mejores Prácticas para el Desarrollo con Flask