Study/fastapi

fastapi와 sqlalchemy admin인 sqladmin을 이용해 celery beat을 admin으로 관리하기

bluebamus 2025. 3. 22. 22:33

저장소 : https://github.com/bluebamus/fastapi-sqlalchemy-admin-celery

sqlalchemy admin 공식 : https://aminalaee.dev/sqladmin/

관련 포스트 : https://puddingcamp.com/page/c83fd343-190e-4a60-b475-e14438a8978b

sqlalchemy-celery-admin : https://github.com/farahats9/sqlalchemy-celery-beat

sqlalchemy admin 관련 포스트 : https://devspoon.tistory.com/343

 

문제 정의 : django에서는 celery beat을 설치하면 migration을 통해 테이블의 정의 없이 생성 가능하고 admin을 이용해 접근하여 사용자가 쉽게 관리할 수 있다. 하지만 fastapi에서 celery beat을 설치하면 이러한 지원이 없다. celery와 관련한 2개의 테이블만 생성이 되고 그 외에는 생성이 되지 않는다.

 

해결 방안 :

1.  admin 관리를 django와 같이 쉽게 생성하고 내부 form과 동작을 쉽게 제어할 수 있도록 지원해주는 패키지인 sqlalchemy admin을 설치한다. 

pip install sqladmin

 

2. django와 같이 테이블이 생성되도록 지원하는 오픈소스 패키지인 sqlalchemy-celery-admin를 설치한다.

pip install sqlalchemy-celery-beat

 

   2.1. 실행 방법 (celery는 동작하고 있다는 가정)

$ celery -A tasks beat -S sqlalchemy_celery_beat.schedulers:DatabaseScheduler -l info

 

      - 만약, celeryconfig.py를 사용하고 celery_beat를 설정하였다면,

celery -A tasks beat -l info

 

3. 관리자 페이지에서 문제 해결

   - 일반적인 방법으로는 sqlalchemy-celery-beat의 모델을 가져올 수 없다. 에러가 발생한다.

   - 이유는 model_class.__table__.schema가 자동으로 생성되기 때문이다.

   - model_class.__table__.schema를 None으로 만들면 해결된다.

    model_class = PeriodicTask
    model_class.__table__.schema = None