Это происходит потому, что данные теряются, когда заканчивается контекст (with app.app_context()
) (doc) .
Внутри контекста все в порядке:
from flask import Flask, g
app = Flask(__name__)
with app.app_context():
g.my_db = 'database ok'
print(g.my_db)
# >>> this prints 'database ok'
Но снаружи вы не можете получить доступ к атрибуту:
from flask import Flask, g
app = Flask(__name__)
with app.app_context():
g.my_db = 'database ok'
print(g.my_db)
# >>> this throws RuntimeError: Working outside of application context
, даже если вы создаете новый контекст:
from flask import Flask, g
app = Flask(__name__)
with app.app_context():
g.my_db = 'database ok'
with app.app_context():
print(g.my_db)
>>> this throws AttributeError: '_AppCtxGlobals' object has no attribute 'my_db'
Лучше всего объявить объект базы данных перед контекстом., а затем импортировать его.Или, может быть, вы можете создать его прямо внутри my_app.py
, где вам это нужно?