2017-06-03 5 views
0

これはpostresqlのデータベースと対話するアプリケーションのログイン機能です。私はPythonには新しく、現在はexceptブロックの両方のprint文が実行されています。 エラーは次のとおりです。cur.execute(mtype、(member_id、))理由について何か感謝します。pythonデータベースアプリケーションtryブロック以外

def check_login(member_id, password): 

    conn = database_connect() 
    if(conn is None): 
     return None 
    cur = conn.cursor() 
    try: 
     mtype = """SELECT 'athlete' FROM athlete 
         WHERE member_id=%s 
         UNION 
         SELECT 'official' FROM official 
         WHERE member_id=%s 
         UNION 
         SELECT 'staff' FROM staff 
         WHERE member_id=%s""" 
     cur.execute(mtype, (member_id,)) 
     user_type = cur.fetchone() 
    except: 
     print("Error retrieving member type") 


    try: 
     sql = """SELECT member_id, title, given_names AS first_name, family_name, country_name, place_name AS residence 
       FROM public.country JOIN public.member USING (country_code) JOIN public.place ON (accommodation = place_id) 
       WHERE member_id=%s AND pass_word=%s""" 

     cur.execute(sql, (member_id, password)) 
     user_data = cur.fetchone() 

     tuples = { 
      'member_id': user_data[0], 
      'title': user_data[1], 
      'first_name': user_data[2], 
      'family_name': user_data[3], 
      'country_name': user_data[4], 
      'residence': user_data[5], 
      'member_type': user_type[0] 
     } 
     cur.close() 
     conn.close() 
     return tuples 
    except: 
     print("Error Invalid Login") 
     cur.close() 
     conn.close() 
     return None 
+2

あなたはすべての例外を捕まえており、私たちに例外を示さないで例外がスローされた理由を尋ねています。 – DeepSpace

+2

例外をキャッチして、それを投稿しないでください。 –

+0

例外が最初にヒットした理由を知りたいですか?それとも、例外が何に当たるのかを知りたいですか? – Luke101

答えて

1

最初のmtype割り当てには%sが複数ありますが、実行では1つのパラメータだけのタプルが提供されます。これは失敗します。これはexecute内のパラメータの正確な数を提供することにより、固定することができます。もちろん

mtype = """SELECT... member_id=%s UNION ... member_id=%s UNION ... member_id=%s""" 
cur.execute(mtype, (member_id, member_id, member_id)) 

は、コード内の他のエラーがあるかもしれません:一つは、本当に、あなたが気にしないしない限り、盲目的に例外をキャッチしないべきかエラーはです。

0

コメントするにはポイントが足りません。だからここに投稿する。どちらの行がエラーを生成しているかだけでは、問題について多くの洞察が得られません。私のアドバイスは、エラーが何であるかを印刷するか、またはそれを行う方法がわからない場合は、最初のtry catchを削除し、生成されたエラーが何であるかを確認することです。あなたが投稿した場合、人々はそれを解決するのを助けることができます。

関連する問題