I am new user of APScheduler. I have a flask application with APScheduler version 3.10.4 and SQLAlchemy version 1.3.23. I am written the following code to schedule some tasks.
The table is created in the database, and when I add the job, a record is also added in the table. But still I am getting the following error:
DEBUG:apscheduler.scheduler:Looking for jobs to run
WARNING:apscheduler.scheduler:Error getting due jobs from job store ‘default’: columns argument to select() must be a Python list or other iterable
Any suggestion on how to resolve this? Thank you
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
from apscheduler.executors.pool import ThreadPoolExecutor
from apscheduler.events import EVENT_JOB_EXECUTED, EVENT_JOB_ERROR
from apscheduler.triggers.cron import CronTrigger
import pytz
from threading import Thread
from model import db, app, APSchedulerJobsTable
import logging
logging.basicConfig()
logging.getLogger('apscheduler').setLevel(logging.DEBUG) # APScheduler log level
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
# Define the German timezone
german_timezone = pytz.timezone('Europe/Berlin')
# Initialize the scheduler
# Use the same database for APScheduler
jobstores = {
'default': SQLAlchemyJobStore(url=app.config['SQLALCHEMY_DATABASE_URI']),
}
executors = {
'default': ThreadPoolExecutor(20)
}
job_defaults = {
'coalesce': False,
'max_instances': 3
}
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults, timezone=german_timezone)
def job_function():
print("Job is running!")
# Add a job to the scheduler
scheduler.add_job(job_function, 'interval', seconds=10, id='test_job')
# Listener function for job events
def job_listener(event):
if event.exception:
logging.error(f"Job {event.job_id} failed with exception: {event.exception}")
else:
logging.info(f"Job {event.job_id} executed successfully")
# Attach the listener to the scheduler to capture job events
scheduler.add_listener(job_listener, EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
def start_scheduler():
scheduler.start()
def stop_scheduler():
scheduler.shutdown()
def run_thread():
# scheduler.start()
# scheduler.print_jobs()
scheduler_thread = Thread(target=start_scheduler)
scheduler_thread.daemon = True
scheduler_thread.start()
This was caused by OP using an unsupported version of SQLAlchemy. APScheduler 3.10 dropped support for SQLAlchemy 1.3.