12

我想向 mysql 发送一个查询并获取一个数组。但是无论我怎么做,我都无法让它发挥作用。这是我的代码:

@app.route('/auth',methods=['GET','POST'])
def auth(): 
    username = request.form['username']
    password = request.form['password']

    cur = db.cursor() 
    cur.execute("SELECT * FROM tbl_user WHERE username = '%s' " % username)

    results = cur.fetchall()

    for row in results:
        print row[0]

它总是说,view function did not return a response。我究竟做错了什么?

4

1 回答 1

17

Flask 抛出这个异常是因为你的auth视图没有返回任何东西。auth从您的视图返回响应:

return 'Some response'

要返回 MySQL 结果,或许可以将这些行连接成一个字符串:

cur.execute("SELECT * FROM tbl_user WHERE username = '%s' " % username)
return '\n'.join([', '.join(r) for r in cur])

或者定义一个模板并返回渲染的模板

请注意,您确实不想对username参数使用字符串插值,尤其是在 Web 应用程序中。请改用 SQL 参数:

cur.execute("SELECT * FROM tbl_user WHERE username = %s", (username,))

现在数据库客户端将为您做报价并防止 SQL 注入攻击。如果使用字符串插值,就会发生这种情况

(如果这是一个不错的数据库(例如不是 MySQL),数据库可以采用现在通用的 SQL 语句并为其创建一个查询计划,然后在您多次执行该查询时一次又一次地重用该计划;使用字符串插值你' d 防止这种情况发生。)

于 2013-02-08T10:14:39.317 回答