Flask 尝试使用apscheduler执行函数时在db.session.add处出错
我在Flask中实现了API,并且工作正常。(从其他API端点获取一些数据并存储到数据库中)Flask 尝试使用apscheduler执行函数时在db.session.add处出错,flask,flask-sqlalchemy,apscheduler,Flask,Flask Sqlalchemy,Apscheduler,我在Flask中实现了API,并且工作正常。(从其他API端点获取一些数据并存储到数据库中) 我还想将此API作为cron作业调用。 因此,我使用apscheduler执行API函数,但出现以下错误。 有人能解释为什么“通过API调用调用此函数有效,但从apscheduler调用此函数无效” 如何解决这个问题 @app.route('/stats/calc',methods=['GET']) def stats_calc(): arguments={ "General":
我还想将此API作为cron作业调用。
因此,我使用apscheduler执行API函数,但出现以下错误。
有人能解释为什么“通过API调用调用此函数有效,但从apscheduler调用此函数无效”
如何解决这个问题
@app.route('/stats/calc',methods=['GET'])
def stats_calc():
arguments={
"General": {
"keyword": "list",
"cols": [],
"new_cols": [],
"processor": "basic",
"row": 0
},
"Lift": {
"keyword": "load",
"cols": [],
"new_cols":["Lift_Power"],
"processor": "lift",
"row": "Design_Level"
}
}
new_summary = Summary(created_date=datetime.now())
db.session.add(new_summary)
db.session.commit()
summary_id = getSummaryId()
for key,obj in arguments.items():
instance=parse_summary("127.0.0.1", obj["keyword"])
instance.convert2df(cols=obj["cols"],processor=obj["processor"])
df=instance.make_onedf(obj["row"])
if df is None:
#print ("No data in "+ key)
dataset=""
count=0
stat_numbers=""
else:
# update column name
if len(obj["new_cols"])==0:
pass
else:
df.columns=obj["new_cols"]
try:
dataset=df.to_json()
count=len(df.index)
stat_numbers={}
for col in df.columns:
stat_json=stats.calc_stats(df,col)
stat_numbers[col]=stat_json
df.to_csv(key + ".csv")
except:
print (key)
new_stat=Stat(category=key,
dataset=dataset,
count=count,
stat_numbers=json.dumps(stat_numbers),
summary_id=summary_id
)
db.session.add(new_stat)
db.session.commit()
return "Finished to process"
scheduler = BackgroundScheduler({'apscheduler.timezone': 'Asia/Hong_Kong'},daemon=True)
scheduler.add_job(stats_calc,"interval",minutes=1)
scheduler.start()
错误
Job "stats_calc (trigger: interval[0:01:00], next run at: 2020-01-28 11:40:01 HKT)" raised an exception
Traceback (most recent call last):
File "/Users/katsuya/.pyenv/versions/EBworker/lib/python3.6/site-packages/sqlalchemy/util/_collections.py", line 1030, in __call__
return self.registry[key]
KeyError: 123145354907648
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/katsuya/.pyenv/versions/EBworker/lib/python3.6/site-packages/apscheduler/executors/base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
File "/Users/katsuya/Documents/EBworker/analytics/views.py", line 153, in stats_calc
db.session.add(new_summary)
File "/Users/katsuya/.pyenv/versions/EBworker/lib/python3.6/site-packages/sqlalchemy/orm/scoping.py", line 162, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/Users/katsuya/.pyenv/versions/EBworker/lib/python3.6/site-packages/sqlalchemy/util/_collections.py", line 1032, in __call__
return self.registry.setdefault(key, self.createfunc())
File "/Users/katsuya/.pyenv/versions/EBworker/lib/python3.6/site-packages/sqlalchemy/orm/session.py", line 3234, in __call__
return self.class_(**local_kw)
File "/Users/katsuya/.pyenv/versions/EBworker/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 136, in __init__
self.app = app = db.get_app()
File "/Users/katsuya/.pyenv/versions/EBworker/lib/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 982, in get_app
'No application found. Either work inside a view function or push'
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.