Chcę uruchomić zadanie z Flask-APScheduler, które wysyła zapytanie do modelu Flask-SQLAlchemy. Po uruchomieniu zadania otrzymuję RuntimeError: application not registered on db instance and no application bound to current context
. Jak uruchomić zadanie, które wysyła zapytanie do bazy danych.Model zapytania w zadaniu Flask-APScheduler podnosi kontekst aplikacji RuntimeError
from flask_apscheduler import APScheduler
scheduler = APScheduler()
scheduler.init_app(app)
scheduler.start()
from models import User
def my_job():
user = User.query.first()
print(user)
Błąd występuje podczas kwerendy, zanim będzie można go wydrukować. Baza danych działa w pozostałej części aplikacji dla innych zapytań.
Próbowałem dodać podczas konfigurowania rozszerzenia, ale to nie zadziałało.
with app.app_context()
scheduler = APScheduler()
scheduler.init_app(app)
scheduler.start()
Pełne traceback jest:
ERROR:apscheduler.executors.default:Job "run_in (trigger: interval[0:00:10], next run at: 2016-10-18 23:00:53 CEST)" raised an exception
Traceback (most recent call last):
File "/Users/user/.virtualenvs/myfolder/lib/python2.7/site-packages/apscheduler/executors/base.py", line 125, in run_job
retval = job.func(*job.args, **job.kwargs)
File "/Users/user/Documents/myfolder/myfolder/myfile.py", line 19, in myjob
user = User.query.all()
File "/Users/user/.virtualenvs/myfolder/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 454, in __get__
return type.query_class(mapper, session=self.sa.session())
File "/Users/user/.virtualenvs/myfolder/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 71, in __call__
return self.registry()
File "/Users/user/.virtualenvs/myfolder/lib/python2.7/site-packages/sqlalchemy/util/_collections.py", line 878, in __call__
return self.registry.setdefault(key, self.createfunc())
File "/Users/user/.virtualenvs/myfolder/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 704, in create_session
return SignallingSession(self, **options)
File "/Users/user/.virtualenvs/myfolder/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 149, in __init__
self.app = db.get_app()
File "/Users/user/.virtualenvs/myfolder/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 845, in get_app
raise RuntimeError('application not registered on db '
RuntimeError: application not registered on db instance and no application bound to current context
"To nigdy nie zadziałało" Nie mogę odtworzyć tego problemu. Przesuwanie kontekstu aplikacji jest równoznaczne z uruchomieniem aplikacji. – davidism
Próbowałem przesuwanie kontekstu aplikacji prawie wszędzie w moim kodzie i nada. – ruipacheco
To brzmi jak kolejny numer. – davidism