diff --git a/ormar/queryset/queries/limit_query.py b/ormar/queryset/queries/limit_query.py index a8fa921..f4a560f 100644 --- a/ormar/queryset/queries/limit_query.py +++ b/ormar/queryset/queries/limit_query.py @@ -20,6 +20,8 @@ class LimitQuery: :return: modified query :rtype: sqlalchemy.sql.selectable.Select """ - if self.limit_count: + + if self.limit_count is not None: expr = expr.limit(self.limit_count) + return expr diff --git a/ormar/queryset/queryset.py b/ormar/queryset/queryset.py index 5ae40b6..b2aa5e7 100644 --- a/ormar/queryset/queryset.py +++ b/ormar/queryset/queryset.py @@ -282,10 +282,10 @@ class QuerySet(Generic[T]): filter_clauses=self.filter_clauses, exclude_clauses=self.exclude_clauses, offset=offset or self.query_offset, - limit_count=limit or self.limit_count, excludable=self._excludable, order_bys=order_bys or self.order_bys, limit_raw_sql=self.limit_sql_raw, + limit_count=limit if limit is not None else self.limit_count, ) exp = qry.build_select_expression() # print("\n", exp.compile(compile_kwargs={"literal_binds": True})) diff --git a/tests/test_queries/test_pagination.py b/tests/test_queries/test_pagination.py index d49e5bf..9650736 100644 --- a/tests/test_queries/test_pagination.py +++ b/tests/test_queries/test_pagination.py @@ -47,6 +47,18 @@ def create_test_database(): metadata.drop_all(engine) +@pytest.mark.asyncio +async def test_limit_zero(): + async with database: + async with database.transaction(force_rollback=True): + for i in range(5): + await Car(name=f"{i}").save() + + cars = await Car.objects.limit(0).all() + assert cars == [] + assert len(cars) == 0 + + @pytest.mark.asyncio async def test_pagination_errors(): async with database: