¿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:

pip install flask-sqlalchemy

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 llamado User que hereda de db.Model.
  • id = db.Column(db.Integer, primary_key=True): Define una columna id que es de tipo entero y es la clave primaria.
  • username = db.Column(db.String(80), unique=True, nullable=False): Define una columna username 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 columna email similar a username.

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:

from yourapplication import db
db.create_all()

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

  1. 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.
  2. Configura la aplicación Flask y Flask-SQLAlchemy.

  3. 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

Módulo 2: Conceptos Básicos de Flask

Módulo 3: Formularios y Entrada de Usuario

Módulo 4: Integración de Bases de Datos

Módulo 5: Autenticación de Usuarios

Módulo 6: Conceptos Avanzados de Flask

Módulo 7: APIs RESTful con Flask

Módulo 8: Despliegue y Producción

Módulo 9: Pruebas y Mejores Prácticas

Módulo 10: Extensiones y Ecosistema de Flask

© Copyright 2024. Todos los derechos reservados