SQLAlchemyBaseController
Extiende BaseController con métodos CRUD listos para SQLAlchemy async.
fastapi_basekit.aio.sqlalchemy.controller.base.SQLAlchemyBaseController
Bases: BaseController
BaseController para SQLAlchemy (AsyncSession).
Controlador base específico para proyectos que usan SQLAlchemy con async/await. Incluye soporte para joins, ordenamiento personalizado y operadores OR en filtros, características específicas de SQL.
Source code in fastapi_basekit/aio/sqlalchemy/controller/base.py
Functions
list(*, use_or=False, joins=None, order_by=None)
async
Lista registros con paginación usando SQLAlchemy.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
use_or
|
bool
|
Si True, usa OR en lugar de AND para los filtros |
False
|
joins
|
Optional[List[str]]
|
Lista de relaciones a hacer JOIN eager loading |
None
|
order_by
|
Optional[Any]
|
Expresión de ordenamiento (ej: User.created_at.desc()) |
None
|
Source code in fastapi_basekit/aio/sqlalchemy/controller/base.py
retrieve(id, *, joins=None)
async
Obtiene un registro por ID.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
id
|
str
|
ID del registro |
required |
joins
|
Optional[List[str]]
|
Lista de relaciones a hacer JOIN eager loading |
None
|
Source code in fastapi_basekit/aio/sqlalchemy/controller/base.py
create(validated_data, *, check_fields=None)
async
Crea un nuevo registro.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
validated_data
|
Any
|
Datos validados para crear |
required |
check_fields
|
Optional[List[str]]
|
Campos a verificar por duplicados antes de crear |
None
|
Source code in fastapi_basekit/aio/sqlalchemy/controller/base.py
to_dict(obj)
Convierte un modelo SQLAlchemy a dict.
Source code in fastapi_basekit/aio/sqlalchemy/controller/base.py
Métodos heredables
async def list(self, *, use_or=False, joins=None, order_by=None) -> BasePaginationResponse:
"""Lista paginada con filtros desde query string."""
async def retrieve(self, id: str, *, joins=None) -> BaseResponse:
"""Retrieve por ID."""
async def create(self, validated_data, *, check_fields=None) -> BaseResponse:
"""Create con duplicate check."""
update y delete se heredan de BaseController.
Patrón canónico
from fastapi_basekit.aio.sqlalchemy.controller.base import SQLAlchemyBaseController
from fastapi_basekit.schema.base import BasePaginationResponse, BaseResponse
@cbv(router)
class ThingController(SQLAlchemyBaseController):
service: ThingService = Depends(get_thing_service)
schema_class = ThingResponseSchema
@router.get("/", response_model=BasePaginationResponse[ThingResponseSchema])
async def list_things(self, page: int = Query(1), count: int = Query(10)):
return await self.list()
@router.get("/{id}", response_model=BaseResponse[ThingResponseSchema])
async def get_thing(self, id: uuid.UUID):
return await self.retrieve(id)
@router.post("/", response_model=BaseResponse[ThingResponseSchema], status_code=201)
async def create_thing(self, data: ThingCreateSchema):
return await self.create(data)