Sto rivedendo l'applicazione Flask sparpagliando i modelli, i blueprints ma sto avendo un errore di runtime.Quando si diffondono i modelli di flask, RuntimeError: "l'applicazione non registrata su db" è stata sollevata
def create_app():
app = flask.Flask("app")
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://'
app.register_blueprint(api)
db.init_app(app)
db.create_all()
return app
Ho il seguente problema (il progetto di esempio sono ospitati qui: https://github.com/chfw/sample):
Traceback (most recent call last):
File "application.py", line 17, in <module>
app = create_app()
File "application.py", line 12, in create_app
db.create_all()
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 856, in create_all
self._execute_for_all_tables(app, bind, 'create_all')
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 836, in _execute_for_all_tables
app = self.get_app(app)
File "\AppData\Roaming\Python\Python27\site-packages\flask_sqlalchemy\__init__.py", line 809, in get_app
raise RuntimeError('application not registered on db
'RuntimeError: application not registered on db
instance and no application bound to current context
ho fatto una ricerca su questo argomento. La ri-factoring si suggerisce qui:
Flask-SQLAlchemy import/context issue
Lo stesso problema è stato sollevato qui:
E il filo sopra (2010) hanno suggerito un hack come questo:
app.register_blueprint(api)
db.app=app #<------------<<
db.init_app(app)
Qualcuno sa come farlo correttamente? come l'hai risolto?
Grazie
Giusto, questo funziona. Ora non ho le eccezioni. Ma il prossimo è: "applicazione non registrata su db" -> RuntimeError: applicazione non registrata su istanza db e nessuna applicazione legata al contesto corrente – chfw
Qual è la differenza qui e l'aggiunta di db.app = app? – user805981
@ user805981 In questo modo potrebbe funzionare, ma non è molto pulito. Innanzitutto, si interrompe l'incapsulamento, poiché l'attributo 'app' su SQLAlchemy non è progettato per essere pubblico. Questo oggetto potrebbe aver bisogno di fare altre cose quando sta cambiando l'app che sta usando. In secondo luogo, 'app_context' fa molto di più che cambiare Flask-SQLAlchemy; in realtà dice a Flask di cambiare l'app corrente. Quindi, potresti aver bisogno di questo per fare cose con varie API Flask, o lavorare con l'app con tutte le tue estensioni Flask. –