diff --git a/fastapi_pagination/ext/sqlalchemy.py b/fastapi_pagination/ext/sqlalchemy.py index 4f20093c..1b892730 100644 --- a/fastapi_pagination/ext/sqlalchemy.py +++ b/fastapi_pagination/ext/sqlalchemy.py @@ -51,9 +51,12 @@ def paginate_query(query: Select, params: AbstractParams) -> Select: return generic_query_apply_params(query, params.to_raw_params().as_limit_offset()) -def count_query(query: Select, *, use_subquery: bool = True) -> Select: +def count_query(query: Select, *, use_subquery: bool, unique: bool) -> Select: query = query.order_by(None).options(noload("*")) + if unique: + query = query.distinct() + if use_subquery: return select(func.count()).select_from(query.subquery()) @@ -112,7 +115,7 @@ def _apply_items_transformer(*args: Any, **kwargs: Any) -> Any: **(additional_data or {}), ) - total = conn.scalar(count_query(query, use_subquery=subquery_count)) + total = conn.scalar(count_query(query, use_subquery=subquery_count, unique=unique)) query = paginate_query(query, params) items = _maybe_unique(conn.execute(query), unique) items = unwrap_scalars(items)