Seite 1 von 1

Psycopg2 nach except cursor nicht mehr zugreifbar

Verfasst: Samstag 18. Februar 2012, 16:37
von 3quin0x
Hi,

für ein Datenbankprojekt benutzen wir psycopg2 und Qt für die Guielemente.

Alles funktioniert bestens...bis auf eins: Angenommen jemand verletzt beim hinzufügen einer email z.B den Primärschlüssel.
Logischerweise wird eine Exception ausgelöst, nach auslösen, besteht die Verbindung zur Datenbank immer noch (man kann sich z.B als PersonalManager oder Admin erfolgreich anmelden, was jedoch nicht mehr geht, sind die ganzen aktualisierungen der QTableWidget.

Ein wenig code dazu:

Code: Alles auswählen

def insertAdmin(self,email,vname,name,pwd,strasse,hausnr,ort,plz,tel,gebdatum,typ):
        sql = """BEGIN;INSERT INTO benutzer VALUES('%s','%s','%s','%s','%s',%s,'%s',%s,'%s','%s','%s');COMMIT;""" % (email,vname,name,pwd,strasse,hausnr,ort,plz,tel,gebdatum,typ)
        try:
            self.cur.execute(sql)                       # Bsp. Email schon vohanden löst exception aus
            return "Benutzereintrag erfolgreich"
        except:
            return "Unable to insert into database"
wenn ich jetzt bestimmte Tabellen updaten möchte:

Code: Alles auswählen

def get_PriceList(self):
        try:
            self.cur.execute("""SELECT * FROM kategorie""")     
      #springt er von hier wieder in die exception, was er nicht machen sollte
            return self.cur.fetchall()
        except:
            return "Datenbank Zugriffsfehler"
Anscheinend ist das Cursor Element nicht mehr aktuell, aber wie vermeide ich das.
Falls mehr Infos erwünscht, bitte fragen.

Gruß

Re: Psycopg2 nach except cursor nicht mehr zugreifbar

Verfasst: Samstag 18. Februar 2012, 16:39
von deets
anstatt den fehler einfach abzufangen, zeig ihn doch mal.

Re: Psycopg2 nach except cursor nicht mehr zugreifbar

Verfasst: Samstag 18. Februar 2012, 16:54
von 3quin0x
der erste war ja klar -> Schlüsselwertverletzung

jetzt zum interssanten:

Code: Alles auswählen

self.cur.execute("SELECT b_email,b_vorname,b_nachname,b_strasse,b_hausnr,b_ort,b_plz,b_telefonnr,b_geburtsdatum FROM benutzer WHERE b_benutzertyp='m'")
psycopg2.InternalError: FEHLER:  aktuelle Transaktion wurde abgebrochen, Befehle werden bis zum Ende der Transaktion ignoriert

Re: Psycopg2 nach except cursor nicht mehr zugreifbar

Verfasst: Samstag 18. Februar 2012, 17:10
von 3quin0x
Hi,

ok ich hab's ...einfach in den except-block ein -> cursor.execute("COMMIT;")

Gruss

Re: Psycopg2 nach except cursor nicht mehr zugreifbar

Verfasst: Samstag 18. Februar 2012, 21:36
von /me
3quin0x hat geschrieben:ok ich hab's ...einfach in den except-block ein -> cursor.execute("COMMIT;")
Im Fehlerfall würde ich ja eher ein ROLLBACK erwarten.