2017-06-03 3 views
0

Dies ist eine Anmeldefunktion in einer Anwendung, die mit einer Datenbank in postresql interagiert. Ich bin neu in Python und derzeit beide print-Anweisungen in der Ausnahme Blöcke werden gerade ausgeführt. Der Fehler ist in: cur.execute (mtype, (member_id,)) Irgendwelche Ideen über, warum sehr geschätzt.Python-Datenbankanwendung versuchen außer Block

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

Sie fangen alle Ausnahmen ab und fragen, warum eine Ausnahme ausgelöst wird, ohne uns die Ausnahme anzuzeigen. – DeepSpace

+2

Fangen Sie nicht die Ausnahme und post, was es ist. –

+0

Möchten Sie wissen, warum die Ausnahmen überhaupt betroffen sind? Oder möchten Sie wissen, warum die Ausnahmen überhaupt betroffen sind? – Luke101

Antwort

1

Sie haben mehrere %s in Ihrer ursprünglichen mtype Zuweisung, aber Ihre Ausführung bietet ein Tupel mit nur einem einzigen Parameter. Dies wird fehlschlagen. Dies kann durch die Eingabe der richtigen Anzahl von Parametern in execute festgesetzt:

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

Natürlich kann es andere Fehler im Code: man sollte nicht fangen Ausnahmen blind, es sei denn, wirklich, Sie mich nicht, was der Fehler ist.

0

Ich habe nicht genug Punkte, um einen Kommentar abzugeben. Also hier posten. Nur zu sagen, welche Zeile Fehler erzeugt, gibt nicht viel Einblick in das Problem. Mein Rat ist entweder Sie drucken, was ist der Fehler oder falls Sie nicht wissen, wie das zu tun ist, entfernen Sie den ersten Versuch zu fangen und sehen, was ist der Fehler produziert. Wenn du das postest, könnten Leute dir helfen, es zu lösen.

Verwandte Themen