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

authビューが何も返さなかったため、Flaskはこの例外をスローします。authビューからの応答を返します。

return 'Some response'

MySQLの結果を返すには、おそらく行を1つの文字列に結合します。

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

または、テンプレートを定義して、レンダリングされたテンプレートを返します

特にWebアプリケーションでは、usernameパラメータに文字列補間を使用したくないことに注意してください。代わりにSQLパラメータを使用してください。

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

これで、データベースクライアントが見積もりを行い、SQLインジェクション攻撃を防ぎます。文字列補間を使用する場合、これは発生します。

(これがまともなデータベース(MySQLではないなど)の場合、データベースは現在一般的なSQLステートメントを取得してクエリプランを作成し、そのクエリを複数回実行するときにプランを何度も再利用できます。文字列補間を使用すると、次のようになります。 dそれを防ぐ。)

于 2013-02-08T10:14:39.317 に答える