2013-02-08 16 views
11

mysqlにクエリを送り、配列を取得したいと思います。しかし、私はそれを働かせることはできません。私のコードは次のとおりです。View関数が応答を返しませんでした

@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と書かれています。私は間違って何をしていますか?

+0

1)投稿コードにインデントを修正し、2)DB内で同じクエリを実行し、その内容を確認してください –

+0

完全なトレースバックとあなたのウェブフレームワークを教えてくださいを使用して。 –

+0

@MartijnPieters FlaskとMySQLで刺しゅうをしています:) –

答えて

15

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

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

またはテンプレートとreturn the rendered templateを定義します。おそらく、1つの文字列に一緒に行を結合、MySQLの結果を返すに

return 'Some response' 

:あなたのauthビューからの応答を返します。

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

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

は今、データベースのクライアントはあなたのために引用符を行うと、SQLインジェクション攻撃を防ぐことができます。文字列補間を使用する場合、this will happen

(これは適切なデータベース(たとえばMySQLではない)の場合、データベースは現在の汎用SQLステートメントを使用してクエリプランを作成し、そのクエリを複数回実行するとプランを何度も再利用できます。文字列補間ではそれを防ぐことができます)

+0

はい、あなたは正しいですSQLから返された値を返しますか? – saidozcan

+0

@ガンダルフあなたはこれに新しいようです - 私はORMを使用することをお勧めします - これは人生をはるかに簡単になります - http://packages.python.org/Flask-SQLAlchemy/の読んでいる –

+0

はい私はパイソンで初心者、私はあなたの助言を取る、ありがとう:) – saidozcan

関連する問題