{"id":28299,"library":"sqlalchemy-celery-beat","title":"SQLAlchemy Celery Beat","description":"A scheduler that stores Celery periodic task schedules in a SQLAlchemy database. Version 0.8.4 is the latest; release cadence is irregular. Provides a database-backed scheduler alternative to Celery's default file-based or Redis scheduler.","status":"active","version":"0.8.4","language":"python","source_language":"en","source_url":"https://github.com/farahats9/sqlalchemy-celery-beat","tags":["celery","beat","scheduler","sqlalchemy","periodic-tasks"],"install":[{"cmd":"pip install sqlalchemy-celery-beat","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Required - this is a Celery beat scheduler.","package":"celery","optional":false},{"reason":"Required - stores schedule entries in a database.","package":"sqlalchemy","optional":false}],"imports":[{"note":"","wrong":"","symbol":"DatabaseScheduler","correct":"from sqlalchemy_celery_beat import DatabaseScheduler"},{"note":"","wrong":"","symbol":"PeriodicTask","correct":"from sqlalchemy_celery_beat.models import PeriodicTask"},{"note":"","wrong":"","symbol":"CrontabSchedule","correct":"from sqlalchemy_celery_beat.models import CrontabSchedule"},{"note":"","wrong":"","symbol":"IntervalSchedule","correct":"from sqlalchemy_celery_beat.models import IntervalSchedule"},{"note":"","wrong":"","symbol":"ClockedSchedule","correct":"from sqlalchemy_celery_beat.models import ClockedSchedule"}],"quickstart":{"code":"import os\nfrom celery import Celery\nfrom sqlalchemy_celery_beat import DatabaseScheduler\nfrom sqlalchemy_celery_beat.models import PeriodicTask, CrontabSchedule\n\napp = Celery('myapp')\napp.config_from_object('celeryconfig')\n\n# Start the beat worker with DatabaseScheduler\n# Run: celery -A myapp beat -S sqlalchemy_celery_beat.DatabaseScheduler -l info","lang":"python","description":"Configure Celery to use DatabaseScheduler. Then start the beat worker with the `-S` flag pointing to the DatabaseScheduler class."},"warnings":[{"fix":"Use `from sqlalchemy.orm import declarative_base` instead of `from sqlalchemy.ext.declarative import declarative_base`.","message":"In version 0.8.4, `declarative_base` is imported from `sqlalchemy.orm` (not `sqlalchemy.ext.declarative`) to avoid deprecation. If you manually define models that mix with PeriodicTask, ensure you use the same import.","severity":"breaking","affected_versions":">=0.8.4"},{"fix":"Check the changelog for field changes. Usually requires dropping and recreating the schedules table, or using Alembic migrations.","message":"In version >=0.8.0, the `PeriodicTask` model fields changed. After upgrading, you may need to recreate your database tables or run migrations.","severity":"breaking","affected_versions":">=0.8.0"},{"fix":"Use `from sqlalchemy_celery_beat import DatabaseScheduler` instead.","message":"The old import path `from beat_schedulers import DatabaseScheduler` is deprecated. It was removed in version 0.7.0.","severity":"deprecated","affected_versions":"<0.7.0"},{"fix":"Set `beat_scheduler` in your Celery config: `app.conf.beat_scheduler = 'sqlalchemy_celery_beat.DatabaseScheduler'` or pass `-S` on the command line.","message":"Do not use `DatabaseScheduler` as the default scheduler in Celery config if you also run `celery beat` without the `-S` flag. The scheduler must be specified at runtime or in config.","severity":"gotcha","affected_versions":"all"},{"fix":"Set `SQLALCHEMY_CELERY_BEAT_DATABASE_URL` environment variable or configure via `app.conf.sqlalchemy_celery_beat_database_url`.","message":"The scheduler uses a dedicated database session. Ensure you configure the database URL properly via the `sqlalchemy_celery_beat` database URL setting (defaults to `sqlite:///celerybeatschedule.db`).","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-09T00:00:00.000Z","next_check":"2026-08-07T00:00:00.000Z","problems":[{"fix":"Use `from sqlalchemy_celery_beat import DatabaseScheduler`.","cause":"Old import path used. The library moved to `sqlalchemy_celery_beat`.","error":"ImportError: cannot import name 'DatabaseScheduler' from 'beat_schedulers'"},{"fix":"Run `celery beat -S sqlalchemy_celery_beat.DatabaseScheduler --create` or manually create tables using `from sqlalchemy_celery_beat.models import PeriodicTask; from sqlalchemy import create_engine; engine = create_engine('...'); PeriodicTask.__table__.create(engine)`.","cause":"Database tables have not been created. The scheduler expects the tables to exist.","error":"sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: periodic_task"},{"fix":"Set the database URL in Celery config: `app.conf.sqlalchemy_celery_beat_database_url = 'sqlite:///schedules.db'` or via env `SQLALCHEMY_CELERY_BEAT_DATABASE_URL`.","cause":"The configuration key for the database URL is missing. The scheduler requires this to be set.","error":"KeyError: 'sqlalchemy_celery_beat_database_url'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}