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
Run Code Online (Sandbox Code Playgroud)
您好这个代码位于DB类中,我得到的错误是
RuntimeError:在应用程序上下文之外工作
此行发生错误
g.sqlite_db = self.connect_db('{}/{}'.format(app.root_path, dbfile))
Run Code Online (Sandbox Code Playgroud)
我认为问题在于g,它是这样导入的 from flask import g
如何修复此错误?谢谢.
Yoh*_*ent 26
第一种方法
flask shell,然后db.create_all()第二种方法
这通常意味着您尝试使用当前应用程序所需的功能。要解决此问题,请使用 来设置应用程序上下文
app.app_context()。
在项目目录中打开 python 终端并手动添加上下文
from project_name import app, db
app.app_context().push()
db.create_all()
Run Code Online (Sandbox Code Playgroud)
Vad*_*imK 15
也许您需要在应用程序上下文中调用您的函数:
with app.app_context():
# call your method here
Run Code Online (Sandbox Code Playgroud)
Jua*_*tos 14
来自Flask的源代码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.\
'''
Run Code Online (Sandbox Code Playgroud)
在文档之后,您可以看到您需要flask.current_app指出您的应用程序,而目前却没有.
在Flask初始化之前,您可能正在调用数据库函数.我的猜测是你的app对象还没有用Flask构造函数创建.
小智 11
创建应用程序时,请使用:
app.app_context().push()
Run Code Online (Sandbox Code Playgroud)
例如像这样:
from yourapp import create_app
app = create_app()
app.app_context().push()
Run Code Online (Sandbox Code Playgroud)
小智 7
这就是为我解决的问题。我希望它对其他人有帮助。
if __name__ == "__main__":
with app.app_context():
db.create_all()
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26285 次 |
| 最近记录: |