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
Transactioncomo tabla: Cambiando el modeloTransactionpara que herede deSQLModely estableciendotable=True, lo cual genera la tabla en la base de datos. - Configurar claves foráneas: Agregar un campo
customer_idenTransaction, que será una clave foránea vinculada aliddeCustomer. - Relaciones bidireccionales: Usar
relationshipyback_populatespara conectar ambos modelos, de modo que al acceder a unCustomer, se puedan ver todas susTransactionsy 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_idexista antes de añadir la transacción. Si no existe, el sistema devuelve un error404 Not Foundcon 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 Createdcuando 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.,
.tablesy.schemaen 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_idinexistente 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.