Я пытаюсь выполнить вставку базы данных в запланированное задание для APScheduler, но при попытке получить
RuntimeError: Working outside of application context.
Вот моя файловая структура
master_content_checklist
|app.py
flask_mcc
|__init__.py
mcc.py
models.py
Внутри приложения .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()
в м cc .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, но как мне получить к нему доступ в моем проекте? любая помощь будет принята с благодарностью.