Relaciones en FastAPI y SQL Model: Creación y Uso Práctico
Clase 13 de 23 • Curso de FastAPI
Resumen
Los modelos de datos en bases de datos relacionales permiten organizar y relacionar información sin duplicarla en múltiples tablas, optimizando así la gestión de datos. Al usar FastAPI y SQLModel, es posible configurar estas relaciones en los modelos que luego reflejarán las tablas en la base de datos, permitiendo un acceso eficiente y estructurado a los datos.
¿Cómo se crea una relación uno a muchos entre modelos?
En SQLModel, para crear una relación uno a muchos, como entre un Customer
y sus Transactions
, se establecen claves foráneas (foreign keys) que vinculan los registros de una tabla con los de otra. En este caso, la tabla Transaction
incluirá un campo customer_id
que hace referencia al id
en la tabla Customer
, garantizando que cada transacción esté asociada con un cliente.
Pasos principales:
- Definir el modelo
Transaction
como tabla: Cambiando el modeloTransaction
para que herede deSQLModel
y estableciendotable=True
, lo cual genera la tabla en la base de datos. - Configurar claves foráneas: Agregar un campo
customer_id
enTransaction
, que será una clave foránea vinculada alid
deCustomer
. - Relaciones bidireccionales: Usar
relationship
yback_populates
para conectar ambos modelos, de modo que al acceder a unCustomer
, se puedan ver todas susTransactions
y viceversa.
¿Cómo se manejan los endpoints de FastAPI para estos modelos relacionados?
Con FastAPI, la creación de endpoints para modelos relacionados implica definir operaciones de creación y consulta que respeten las relaciones establecidas.
- Crear un endpoint para listar transacciones: Con una query básica que retorna todas las transacciones de la base de datos.
- Crear un endpoint para crear transacciones: Requiere validar que el
customer_id
exista antes de añadir la transacción. Si no existe, el sistema devuelve un error404 Not Found
con un mensaje claro. - Ajuste de código de estado en respuestas: En este caso, el endpoint de creación debe responder con un código
201 Created
cuando una transacción se guarda exitosamente.
¿Cómo probar las relaciones y endpoints configurados?
Para verificar que las configuraciones funcionan correctamente:
- Verificar la existencia de tablas: Tras ejecutar el proyecto, se pueden revisar las tablas con comandos SQL (ej.,
.tables
y.schema
en SQLite). - Pruebas de creación de registros: Crear un cliente y luego una transacción asociada a este. Intentar crear una transacción para un
customer_id
inexistente debería retornar un error claro. - Consulta de transacciones: Al listar transacciones, deben mostrarse solo las asociadas al cliente indicado en
customer_id
.
¿Cómo optimizar la consulta de datos en FastAPI y SQLModel?
SQLModel simplifica el acceso a los datos mediante relaciones, evitando la necesidad de múltiples queries. Al usar relationship
, se puede acceder a los datos relacionados directamente, ahorrando tiempo y simplificando el código.