2016-12-22 25 views
0

私はPython-Flaskを初めて使用しており、MySQLDBを使用してデータベースに接続しようとしています。ただし、カーソルで実行されたクエリが成功したかどうか、または失敗したかどうかを確認する方法を決定することはできません。以下のコードで、誰かがif文の条件をどうやって調べることができるかアドバイスしてもらえますか? cはデータベースへのカーソルであり、正常に接続しているので、以下のコードから除外しました。Flask mySQLDBが成功または失敗を実行します

qry = "SELECT count(*) FROM users where username = (%s)" % (username) 
try: 
    x = c.execute(qry) #Is this correct? Doe execute command return a value? 
    if <<*Check if the query executed successfully*>>: 
     return 'Success' 
    else: 
     return 'Failure' 
except Exception as e: 
    return 'Failure' 
+0

これは奇妙なことです。あなたはカウントを求めているので、通常の動作は値を返すことでしょう、確かに? –

+0

ダニエルありがとう。それは単なるサンプルクエリでした。私はテーブル名を "user"ではなく "users"と間違えたと考えています...代わりに挿入クエリを想像して空のユーザー名を挿入しようとしましたが、DBにはユーザー名が主キーとして含まれています。したがって、それは失敗し、クエリの実行が成功したかどうかに関わらず、戻り値を取得しようとしています。 – tirupats

答えて

1

c.execute(qry)あなたの場合は何も返されません。だから、ifのステートメントには使用できません。

ただし、fetchall()またはfetchone()を使用して、クエリの結果があるかどうかを確認できます。これは次のようになります。

qry = "SELECT count(*) FROM users where username = (%s)" % (username) 
try: 
    c.execute(qry) #Is this correct? Doe execute command return a value? 
    user = c.fetchone() 
    if user: 
     return 'Success' 
    else: 
     return 'Failure' 
except Exception as e: 
    return 'Failure' 
+0

もしそれがどのように動作するのでしょうか? –

+0

最初に、 'insert'が使われるなら' fetchone'はありません。第2に、 'insert'のエラーは' except'部分で捕捉されます。 – Fejs

0

あなたが既に投稿したコードの失敗を検出する手段があります。クエリに何か問題が生じた場合、Pythonは例外を送出します。あなたは裸のExceptionを捕まえるべきではないことは注目に値するが、あなたは確かにその例外が何であるかを隠すべきではない。関連するMySQLdbの例外をキャッチします(例:MySQLdb.Error)。

関連する問題