Relaciones en FastAPI y SQL Model: Creación y Uso Práctico

Clase 13 de 23Curso 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 modelo Transaction para que herede de SQLModel y estableciendo table=True, lo cual genera la tabla en la base de datos.
  • Configurar claves foráneas: Agregar un campo customer_id en Transaction, que será una clave foránea vinculada al id de Customer.
  • Relaciones bidireccionales: Usar relationship y back_populates para conectar ambos modelos, de modo que al acceder a un Customer, se puedan ver todas sus Transactions 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 error 404 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:

  1. Verificar la existencia de tablas: Tras ejecutar el proyecto, se pueden revisar las tablas con comandos SQL (ej., .tables y .schema en SQLite).
  2. 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.
  3. 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.