如何通过sqlalchemy获取APScheduler的最新数据?
How can I get the latest data from APScheduler through sqlalchemy?
我尝试使用 Advanced Python Scheduler 每五秒通过 flask sqlalchemy 从我的 MySql 数据库中获取数据。
就我而言,我想通过Flask SQLAlchemy从APScheduler中获取最新修改的数据,但是我多次更改MySql数据库中的数据后,我仍然得到最早的数据数据库。
似乎 APScheduler 只 运行 一次工作,而在接下来的时间里它只是 "remember" 和 "copy" 它做了什么。
以下是APScheduler的相关设置。
jobstores={"default":MemoryJobStore(),}
executors={"threadpool":ThreadPoolExecutor(max_workers=20)}
job_default={
'coalesce': True,
'max_instances': 1,
'replace_existing':True
}
scheduler=BackgroundScheduler(jobstores=jobstores,executors=executors,job_default=job_default)
def testJob():
test=Test.query.filter_by(id=2).first()
with open('test.log','a+') as f:
s=str(datetime.now())+' '+str(test)+'\n'
f.writelines([s])
tmpL=[CronTrigger(minute=m,second=s) for m in range(60) for s in range(0,60,5)]
tmpL.append(DateTrigger(run_date=datetime.now()))
trigger=OrTrigger(tmpL)
job=scheduler.add_job(testJob,trigger,id="testJob",replace_existing=True)
scheduler.start()
在我的测试中,我的table最初包含数据"cat 4",然后我将其更改为"dog 3"、"orange 7"等。我什至删除了那行数据。但是我每五秒只能得到"Test 2:cat->4"
enter image description here
如何通过sqlalchemy获取APScheduler的最新数据?
您的调度程序可能使用单个线程来执行 运行 个作业,因为它们很少见。从 Test.query
看来,您可能正在使用 Flask-SQLAlchemy,它默认使用范围会话,或者换句话说,线程本地会话。您的作业也不会结束由查询隐式启动的事务。这些与使用默认为 REPEATABLE READ
事务隔离级别的 MySQL 相结合导致作业共享相同的事务,因此从数据库的相同快照读取。只需及时结束您的交易:
def testJob():
test=Test.query.filter_by(id=2).first()
db.session.rollback()
...
我尝试使用 Advanced Python Scheduler 每五秒通过 flask sqlalchemy 从我的 MySql 数据库中获取数据。
就我而言,我想通过Flask SQLAlchemy从APScheduler中获取最新修改的数据,但是我多次更改MySql数据库中的数据后,我仍然得到最早的数据数据库。
似乎 APScheduler 只 运行 一次工作,而在接下来的时间里它只是 "remember" 和 "copy" 它做了什么。 以下是APScheduler的相关设置。
jobstores={"default":MemoryJobStore(),}
executors={"threadpool":ThreadPoolExecutor(max_workers=20)}
job_default={
'coalesce': True,
'max_instances': 1,
'replace_existing':True
}
scheduler=BackgroundScheduler(jobstores=jobstores,executors=executors,job_default=job_default)
def testJob():
test=Test.query.filter_by(id=2).first()
with open('test.log','a+') as f:
s=str(datetime.now())+' '+str(test)+'\n'
f.writelines([s])
tmpL=[CronTrigger(minute=m,second=s) for m in range(60) for s in range(0,60,5)]
tmpL.append(DateTrigger(run_date=datetime.now()))
trigger=OrTrigger(tmpL)
job=scheduler.add_job(testJob,trigger,id="testJob",replace_existing=True)
scheduler.start()
在我的测试中,我的table最初包含数据"cat 4",然后我将其更改为"dog 3"、"orange 7"等。我什至删除了那行数据。但是我每五秒只能得到"Test 2:cat->4"
enter image description here
如何通过sqlalchemy获取APScheduler的最新数据?
您的调度程序可能使用单个线程来执行 运行 个作业,因为它们很少见。从 Test.query
看来,您可能正在使用 Flask-SQLAlchemy,它默认使用范围会话,或者换句话说,线程本地会话。您的作业也不会结束由查询隐式启动的事务。这些与使用默认为 REPEATABLE READ
事务隔离级别的 MySQL 相结合导致作业共享相同的事务,因此从数据库的相同快照读取。只需及时结束您的交易:
def testJob():
test=Test.query.filter_by(id=2).first()
db.session.rollback()
...