web-dev-qa-db-fra.com

travail en dehors du contexte de l'application - Flask

def get_db(self,dbfile):
    if hasattr(g, 'sqlite_db'): self.close_db(g.sqlite_db)
    try:
        g.sqlite_db = self.connect_db('{}/{}'.format(app.root_path, dbfile))
    except sqlite3.OperationalError as e:
        raise e

    return g.sqlite_db

Bonjour, ce code est situé à l’intérieur de la classe de base de données. 

RuntimeError: travail en dehors du contexte de l'application

l'erreur se produit sur cette ligne

g.sqlite_db = self.connect_db('{}/{}'.format(app.root_path, dbfile))

Je pense que le problème est avec g, il est importé comme ça from flask import g

Comment cette erreur peut-elle être corrigée? Merci.

9
Koten

À partir du code source Flask dans flask/globals.py

_app_ctx_err_msg = '''\
Working outside of application context.

This typically means that you attempted to use functionality that needed
to interface with the current application object in a way.  To solve
this set up an application context with app.app_context().  See the
documentation for more information.\
'''

En suivant la documentation, vous constaterez que vous devez indiquer flask.current_app à votre application, ce qui n’est pas le cas actuellement.

Vous appelez probablement votre fonction DB avant que Flask ne soit initialisé. Je suppose que votre objet app n'a pas encore été créé avec le constructeur Flask.

9
Juan Pablo Santos

Peut-être devez-vous appeler votre fonction dans un contexte d'application:

with app.app_context():
  # call your method here
10
VadimK

Pour développer la réponse de @ VadimK. Si vous souhaitez empêcher votre code de s'exécuter en dehors d'un app_context, vous pouvez utiliser flask.has_app_context () pour voir si le code est actuellement dans un contexte app :

Voir aussi: flask.has_request_context ()

0
user2682863

Lors de la création de votre application, utilisez: 

app.app_context().Push()

par exemple comme ceci:

from yourapp import create_app

app = create_app()

app.app_context().Push()

pour plus d'informations