我真的不明白这是如何运作的。我从flaskr的例子中得到了代码。它曾经工作,现在它没有。
我收到以下错误:AttributeError: 'NoneType' object has no attribute 'sqlite_db'
违规行:top.sqlite_db = sqlite_db
from champNotif_v2 import app
from flask import _app_ctx_stack, g
import sqlite3
def get_db():
"""Opens a new database connection if there is none yet for the
current application context.
"""
top = _app_ctx_stack.top
if not hasattr(top, 'sqlite_db'):
sqlite_db = sqlite3.connect(app.config['DATABASE'])
sqlite_db.row_factory = sqlite3.Row
top.sqlite_db = sqlite_db
return top.sqlite_db
__init__.py
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile('info.py')
import champNotif_v2.views
info.py
DATABASE = "freeChamp.db"
答案 0 :(得分:0)
似乎top
是None
,而不是您期望的那样。因此,_app_ctx_stack.top
必须为None
,因为top
的设置必须为_app_ctx_stack.top
。您需要确定None
为top
的原因并解决此问题,或者如果需要这样做,请在使用top = _app_ctx_stack.top
...
if top is not None:
top.sqlite_db = sqlite_db
之前添加检查,例如:
{{1}}
答案 1 :(得分:0)
答案 2 :(得分:0)
您需要将代码放在with app.app_context()
块中,如下所示
def init_db():
"""Initializes the database."""
with app.app_context():
db = get_db()
with app.open_resource('schema.sql', mode='r') as f:
db.cursor().executescript(f.read())
db.commit()