Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: psycopg2.InternalError (Python)

  1. #11
    Hannes23 ist offline Benutzer
    Registriert seit
    07.05.2010
    Beiträge
    40

    Standard

    Da gehts mir auch garnicht um die Syntax - ich meinte nur, ob das vom Herangehen so sein sollte? Also vor allem, muss ich hier einen rollback machen, auch wenn ich vorher "nur" ein SELECT (und kein INSERT oder UPDATE) habe?

  2. #12
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Ein SELECT kann auch fehlerhaft sein. Entweder falsche Syntax, es kann auf Tabellennamen zugreifen, die es gar nicht gibt. Oder das SELECT kann Funktionen aufrufen, die wiederum fehlerhaft sind.

    Alle SELECTs sind auch in Transaktionen gekapselt.


    Ich möchte den Ratschlag von akretschmer hier wiederholen: beschäftige dich bitte eingehend mit der Funktionsweise von Transaktionen. Und danach schau dir an, wie deine Programmiersprache mit Transaktionen umgeht und wie du Fehler abfängst.
    Du solltest zuerst wissen, wie du mit deinen Werkzeugen umgehst, danach kannst du dich an die eigentliche Fehlersuche machen.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #13
    Hannes23 ist offline Benutzer
    Registriert seit
    07.05.2010
    Beiträge
    40

    Standard

    Ok, dann vielen Dank schonmal euch beiden!!

  4. #14
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Also: Wenn du mit cursor.execute(sql) was in die DB schreibst, wird das von psycopg als Transaktion gekapselt. Das kann auch mit Dictionarys sehr umfangreich sein. Wenn alles klappt, kannst du ein conn.commit() hinterherwerfen, wenn nicht kommt das Rollback automatisch, bzw. es wurde ja bis dahin nichts fest in die DB geschrieben. Helfen tut dir das hier aber nicht, denn du machst ja ein select. Typeconversions werden im übrigen auch recht zuverlässig von psycopg2 erledigt.
    Hast du mal probiert, das SQL händisch in der DB auszuführen, bzw. mal ein bisschen damit rumzuspielen, um den Fehler einzugrenzen? eventuell sind die DB-Meldungen auch ausagekräfiger. Greifen u.U. noch andere Prozesse auf die Tabelle zu, so das sie gelockt ist? Schliesslich scheint der Fehler aufzutreten, bevor psycopg2 ein Ergebnis liefern kann, denn sonst würde der Zugriff auf row einen index-out-of-range oder einfach nichts liefern. Du kannst auch mal den ganzen Traceback des Fehlers posten, da kann man auch sehen, was da passiert.

    Gruß Uwe

    PS: Nur zur Info, falls dort eine Lösung auftaucht: python-forum

    EDIT: OK, jetzt hab ich alles gelesen Das SQL stimmt also und funktioniert. Das bedeutet, psycopg2 kann das auch ausführen, sofern es eine korrekte Verbindung vorfindet. Im schlimmsten Fall kommt halt nix zurück oder der Code danach liefert einen Fehler. Also muß der Fehler an der Verbindung liegen, erreichst du eventuell das Limit? Oder wird die Verbindung vorher geschlossen? Ggf. von einem anderen Prozess? Sicher, das die Tabelle nicht gelockt ist?
    Du solltest auf jeden Fall das ganze Traceback des Fehlers posten (auch im Python-Forum) , denn der liegt vermutlich irgendwo im Pythonteil.

    n8 Uwe
    Geändert von Gisman (13.07.2010 um 21:39 Uhr)
    Have a lot of fun!

  5. #15
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    EDIT2: Das sagen die Erfinder von psycopg2 dazu. Das Rolback würde dann wohl so funktionieren:

    Code:
    try:
        cursor.execute(sql, params)
        row = cursor.fetchall()
    except:
        conn.rollback()
    Das beseitigt jedoch nicht den Fehler sondern fängt nur dessen Folgen ab.
    Geändert von Gisman (13.07.2010 um 22:13 Uhr)
    Have a lot of fun!

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Frage Python 3
    Von justinsopa im Forum Programmierung
    Antworten: 1
    Letzter Beitrag: 21.05.2009, 10:18
  2. Frage import von Python modulen
    Von fuppes im Forum Prozedurale Sprachen
    Antworten: 1
    Letzter Beitrag: 06.09.2008, 22:40
  3. Python + Windows xp + PostgreSQL 8.2.6
    Von Data im Forum Prozedurale Sprachen
    Antworten: 0
    Letzter Beitrag: 11.03.2008, 16:44
  4. SQL Injection-Gefahr bei pl/python?
    Von Tim im Forum Prozedurale Sprachen
    Antworten: 2
    Letzter Beitrag: 27.04.2007, 01:23
  5. Python-Trigger
    Von blasehase im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 14.06.2006, 19:06

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum