[python] SQLAlchemy-Utils에서 제공하는 다양한 페이징 기능 알아보기

SQLAlchemy-Utils는 SQLAlchemy를 보완하여 다양한 유틸리티 기능을 제공하는 패키지입니다. 이 중에서도 페이징과 관련된 기능은 데이터베이스에서 데이터를 효과적으로 가져오는 데 도움이 됩니다. 이번 포스팅에서는 SQLAlchemy-Utils에서 제공하는 다양한 페이징 기능을 알아보겠습니다.

1. paginate 함수

SQLAlchemy-Utils는 sqlalchemy_utils.functions.paginate 함수를 통해 간단하고 강력한 페이징 기능을 제공합니다. 이 함수를 사용하면 원하는 페이지 번호와 페이지당 결과 수를 지정하여 데이터를 가져올 수 있습니다.

from sqlalchemy_utils import functions

query = User.query
page = 1
per_page = 10
pagination = functions.paginate(query, page, per_page)

2. LimitOffsetPager 클래스

sqlalchemy_utils.paginate.LimitOffsetPager 클래스를 사용하면 limit-offset 방식의 페이징을 손쉽게 구현할 수 있습니다. 이 방식은 특정 위치부터 지정된 개수의 결과를 가져오는 방식으로, 대량의 데이터에서 페이지를 나눠 가져올 때 유용합니다.

from sqlalchemy_utils import LimitOffsetPager

pager = LimitOffsetPager(query, per_page=10)
page_number = 1
items = pager.get_offset(page_number)

3. arrow 라이브러리와의 통합

SQLAlchemy-Utils는 arrow 라이브러리와 통합하여, arrow.arrow 객체를 반환하는 datetime_range 함수를 제공합니다. 이를 통해 특정 기간 동안의 데이터를 페이징하여 가져올 수 있습니다.

from sqlalchemy_utils import datetime_range
import arrow

start_datetime = arrow.now().shift(days=-7)
end_datetime = arrow.now()
results = datetime_range(query, start_datetime, end_datetime, page=1, per_page=10)

SQLAlchemy-Utils를 사용하면 복잡한 페이징 처리를 간편하게 수행할 수 있습니다. 여러 가지 페이징 기능을 익히고 적절히 활용하여 데이터를 효과적으로 제어할 수 있습니다.

참고 자료