我的源代码具有以下结构:
main.py:
from flask import Flask, g
app = Flask(__name__)
with app.app_context():
g.my_db = PostgreSQL()
app.register_blueprint(my_app, url_prefix="/my_app")
Run Code Online (Sandbox Code Playgroud)
my_app.py:
from flask import Blueprint, g
my_app = Blueprint("my_app", __name__)
@my_app.route("/")
def index():
return g.my_db.fetch_all() <<< ERROR
Run Code Online (Sandbox Code Playgroud)
但它显示了这个错误:
AttributeError: '_AppCtxGlobals' object has no attribute 'my_db'
即使我尝试g在应用程序上下文之外使用,它也会显示此错误:
RuntimeError: Working outside of application context.
那么如何在 Flask 中设置和访问全局变量呢?
AttributeError: __enter__当我尝试使用像本指南中的 sqlalchemy会话时,我得到这个.
我的代码:
Session = scoped_session(sessionmaker(autoflush=True, autocommit=False, bind=engine))
@contextmanager
def session_scope():
session = Session()
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
session.close()
class SomeClass:
def __init__(self):
self.session_scope = session_scope
def something_with_session(self):
with self.session_scope as session: <-- error
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我正在使用python 3.6