如何解决“” AttributeError:'NoneType'对象没有属性'app'

时间:2019-09-02 01:12:50

标签: python mysql flask

我是Web框架的新手,我正在尝试做一个简单的项目。我想在html页面上显示MySQL数据,但是我不断收到此AttributeError:'NoneType'对象没有属性'app'。

我看过其他解决方案,但似乎无法弄清楚自己在做什么错。任何帮助,将不胜感激。我确实运行了这段代码:

TEST.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

print(hello_world())

这很好。

python代码

import mysql.connector
from flask import Flask, render_template
app = Flask(__name__)

hostname = ''
username = ''
password = ''
database = ''

#run query on a database
@app.route('/')
def doQuery(conn):
    cur = conn.cursor()
    query = "SELECT * FROM maxes"
    cur.execute(query)

    data = cur.fetchall()

    return render_template("weightlifting.html", data=data)

print("Using mysql.connector")
myConnection = mysql.connector.connect(host=hostname, user=username, password=password, db=database)
doQuery(myConnection)
myConnection.close()

这是我得到的错误:

Using mysql.connector
Traceback (most recent call last):
  File "database.py", line 24, in <module>
    doQuery(myConnection)
  File "database.py", line 20, in doQuery
    return render_template("weightlifting.html", data=data)
  File "C:\Users\kbb_n\Anaconda3_2\lib\site-packages\flask\templating.py", line 133, in render_template
    ctx.app.update_template_context(context)
AttributeError: 'NoneType' object has no attribute 'app'

2 个答案:

答案 0 :(得分:0)

通常,您真的不应该直接调用route函数。

您的hello_world测试恰好起作用,因为该视图返回了一个简单的字符串。

但是doQuery视图返回一个模板渲染,该渲染更加复杂并且需要实际的Web请求上下文,而直接调用该函数会丢失该模板。

答案 1 :(得分:0)

我在尝试在 Google 的 AppEngine 上运行 Python 代码时遇到了类似的错误。解决方案是使用 -Werror 来指定服务器。我使用 partitions_train_x = [] partitions_train_y = [] partitions_test_x = [] partitions_test_y = [] x = np.arange(len(y_train)) np.random.shuffle(x) indices = np.split(x, num_partitions) for data_indices in zip(indices): x = x_train[data_indices] y = y_train[data_indices] partions_train_x.append(x) partitions_train_y.append(y) x = np.arange(len(y_test)) indices = np.split(x, num_partitions) for data_indices in zip(indices): x = x_test[data_indices] y = y_test[data_indices] partitions_test_x.append(x) partitions_test_y.append(y) 来做到这一点:

app.config.update()