【问题标题】:View function did not return a response查看函数没有返回响应
【发布时间】:2013-02-08 10:06:50
【问题描述】:

我想向 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。我做错了什么?

【问题讨论】:

  • 1) 修复您发布的代码中的缩进和 2) 在您的数据库中运行相同的查询,看看它说了什么
  • 请给我们完整的回溯,以及您正在使用的网络框架。
  • @MartijnPieters 我正在尝试 Flask 和 MySQL :)
  • @JonClements:如果view 指的是auth 方法怎么办...
  • 我用的是flask,你说得对,我应该删除GET方法

标签: python sql flask


【解决方案1】:

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])

或者定义一个模板和return the rendered template

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

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

现在数据库客户端将为您进行引用并防止 SQL 注入攻击。如果你使用字符串插值,this will happen

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

【讨论】:

  • @Gandalf 您似乎对此很陌生-我建议您使用 ORM-这将使生活更轻松-阅读packages.python.org/Flask-SQLAlchemy
  • 是的,我是 python 初学者,我会接受你的建议,谢谢 :)
  • 确实如此!我想要一些小鲍比桌子。
  • 我仍然解决了我的问题。我想做的是,将发布数据与数据库中的行进行比较。所以我应该使用给定的用户名发送查询并得到结果,而不是比较密码。但是不能对 sql 结果做任何事情。谁能帮忙
  • @Gandalf:我们在这里误入了“太宽泛”的领域。你需要找到一个关于 Python 和 SQL 查询的好教程。
猜你喜欢
  • 1970-01-01
  • 2015-11-09
  • 2018-01-14
  • 2018-05-16
  • 2014-04-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多