Conexión de FastAPI con SQLite usando SQLModel
Clase 8 de 23 • Curso 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?
-
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. -
Creación del archivo de configuración:
- Crea un archivo
db.py
. - Importa las clases
Session
ycreate_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
.
- Crea un archivo
-
Creación del
engine
:- Utiliza
create_engine
con la URL de la base de datos para crear el motor que gestionará las sesiones.
- Utiliza
¿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?
-
Modificación del modelo: Si usas modelos de Pydantic, ajústalos para heredar de
SQLModel
en vez deBaseModel
. Esto conecta los modelos con la base de datos. -
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.
- En el modelo que representa una tabla, añade
-
Ejemplo de implementación:
- Define un modelo
CustomerBase
para los datos comunes. - Crea un modelo
Customer
, que herede deCustomerBase
y deSQLModel
, contable=True
para almacenar los registros en la tabla correspondiente.
- Define un modelo
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.