Conexión de FastAPI con SQLite usando SQLModel

Clase 8 de 23Curso de FastAPI

Resumen

Para conectar FastAPI con una base de datos real, primero configuraremos una base de datos SQLite utilizando la librería SQLModel, que facilita la integración sin necesidad de escribir SQL. SQLModel combina Pydantic y SQLAlchemy, permitiendo que nuestros modelos se almacenen directamente en bases de datos con una sintaxis simplificada.

¿Cómo instalar y configurar SQLModel?

  1. Instalación: Abre la terminal y ejecuta:

    pip install sqlmodel
    

    También es recomendable registrar las dependencias en un archivo requirements.txt, como SQLModel y FastAPI con sus respectivas versiones. Esto ayuda a instalar todas las dependencias en otros entornos fácilmente.

  2. Creación del archivo de configuración:

    • Crea un archivo db.py.
    • Importa las clases Session y create_engine de SQLModel para gestionar la conexión.
    • Define las variables para la conexión, como la URL de la base de datos, en este caso sqlite:///database_name.db.
  3. Creación del engine:

    • Utiliza create_engine con la URL de la base de datos para crear el motor que gestionará las sesiones.

¿Cómo definir la sesión para la base de datos?

Para manejar las conexiones, define una función get_session en db.py, la cual:

  • Crea un contexto que inicia y cierra la sesión automáticamente.
  • Facilita el uso de la sesión en varios endpoints de FastAPI.

¿Cómo registrar la sesión como dependencia en FastAPI?

Para que FastAPI use la sesión en sus endpoints:

  • Importa Depends de FastAPI.
  • Define una dependencia que gestione la sesión mediante get_session, facilitando el acceso a la base de datos desde cualquier endpoint.

¿Cómo adaptar los modelos para almacenar datos en la base de datos?

  1. Modificación del modelo: Si usas modelos de Pydantic, ajústalos para heredar de SQLModel en vez de BaseModel. Esto conecta los modelos con la base de datos.

  2. Creación de tablas:

    • En el modelo que representa una tabla, añade table=True para que SQLModel cree automáticamente la tabla en la base de datos.
    • Hereda los atributos comunes de un modelo base (sin table=True) para evitar duplicaciones y asegurar que se incluyan todos los campos necesarios.
  3. Ejemplo de implementación:

    • Define un modelo CustomerBase para los datos comunes.
    • Crea un modelo Customer, que herede de CustomerBase y de SQLModel, con table=True para almacenar los registros en la tabla correspondiente.

Con esta configuración, los datos se insertarán en la base de datos sin necesidad de escribir SQL directamente. Al definir la dependencia de sesión en FastAPI, cada vez que un endpoint la requiera, FastAPI se conectará a la base de datos automáticamente.