AttributeError:' NoneType'对象没有属性' sqlite_db'

时间:2015-04-10 02:51:42

标签: python flask

我真的不明白这是如何运作的。我从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"

3 个答案:

答案 0 :(得分:0)

似乎topNone,而不是您期望的那样。因此,_app_ctx_stack.top必须为None,因为top的设置必须为_app_ctx_stack.top。您需要确定Nonetop的原因并解决此问题,或者如果需要这样做,请在使用top = _app_ctx_stack.top ... if top is not None: top.sqlite_db = sqlite_db 之前添加检查,例如:

{{1}}

答案 1 :(得分:0)

如果您查看此link中的一个示例,您会注意到

if not hasattr(top, 'sqlite3_db'):

这是问sqlite3_db而不是sqlite_db,这可能是你的问题。

答案 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()
相关问题