我正在尝试在APScheduler的预定作业上插入数据库,但是当我尝试时会得到
RuntimeError: Working outside of application context.
这是我的文件结构
master_content_checklist
|app.py
flask_mcc
|__init__.py
mcc.py
models.py
内部app.py
import flask_mcc
app = flask_mcc.create_app()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=True)
在我的init.py内
import os
from flask import Flask, render_template
from . import mcc
from . import manage_users
from flask_mcc.models import db, User, Role
from flask_sqlalchemy import SQLAlchemy
from flask_user import UserManager
def create_app(test_config=None):
configure_database(app)
user_manager = UserManager(app, db, User)
db.init_app(app)
app.register_blueprint(mcc.bp)
app.register_blueprint(manage_users.bp)
app.app_context().push()
return app
def configure_database(app):
@app.before_first_request
def initialize_database():
db.create_all()
@app.teardown_request
def shutdown_session(exception=None):
db.session.remove()
在mcc.py
from flask import Flask, render_template, current_app
from flask_mcc.models import Alert
def send_alert(alert):
with current_app.app_context():
new_alert = alert
new_alert.date_live = datetime.datetime.now()
new_alert.reoccuring = None
db.session.add(new_alert)
db.session.commit()
print(alert.message)
scheduler = BackgroundScheduler(daemon=True)
scheduler.start()
atexit.register(lambda: scheduler.shutdown(wait=False))
def add_reoccuring_alert(alert):
scheduler.add_job(send_alert, 'cron', month='2', day='3rd fri', hour=11, minute=24, args=[alert], id=str(alert.id))
scheduler.print_jobs()
据我了解,我没有在蓝图内正确使用应用程序上下文。我尝试将其导入为
from . import app
然后做
with app.app_context():
但是那也不起作用。我的文件结构不正确吗?我是否应该真正在 init .py中初始化调度程序,但是如何在我的蓝图中对其进行访问? 任何帮助将不胜感激。