Seite 1 von 1

Postgresql mit psycopg2 - Fehlerbehandlung in SQL

Verfasst: Freitag 21. August 2009, 13:15
von PNS-Richi
Hallo,

gibt es ne möglichkeit psycopg2 mit zu teilen das es Fehler in SQL Anweisungen ignorieren soll?

Code: Alles auswählen

...
		sql = """DROP TABLE cat;
DROP TABLE blacklist;
DROP TABLE valid_time;
DROP TABLE whitelist_stat;"""

		self.c.execute(sql)
...
Wenn nun z.b. die Tabelle "cat" nicht vorhanden ist bricht er ab. Es geht jetzt allgemein um SQL Befehle. Egal ob nun in Zeile 354 ein Fehler aufgetretten ist, er soll einfach mit dem nächsten weiter machen. Ich hab nur ON_ERROR_ABORT gefunden, nur funktioniert dies nicht.

Schon mal danke für eure Hilfe...

lg Richi

Verfasst: Freitag 21. August 2009, 13:27
von lunar
Fange die auftretende Ausnahme ab und verwirf sie:

Code: Alles auswählen

try:
    some_function_that_might_fail()
except SomeError:
    pass
Ein Kommentar, warum die Ausnahme verworfen werden kann, sollte allerdings noch dabei stehen.

Verfasst: Freitag 21. August 2009, 14:39
von PNS-Richi
Hallo,

die Python Fehlerbehandlung ist mir schon klar, nur ich hätte das gerne über Postgresql gelöst. In anderen Datenbanken ist es ja auch möglich SQL Fehler zu ignorieren.

lg Richi

Verfasst: Freitag 21. August 2009, 14:54
von lunar
Entschuldige, dann habe ich Dich falsch verstanden :oops:

Eine allgemeine Möglichkeit zum Unterdrücken von SQL-Fehlern in Postgre kenne ich nicht. Bei "DROP TABLE" kannst Du allerdings "DROP TABLE IF EXISTS foobar" verwenden, um zumindest Fehler bei nicht vorhandenen Tabellen zu vermeiden.

Verfasst: Freitag 21. August 2009, 15:39
von PNS-Richi
Kommunikationsproblem :P

Nur leider brauch ichs bei mehr als nur bei "DROP ...".
Bei ein paar Millionen Einträgen ist es leichter Fehler zu überspringen, als zu überprüfen ob der Eintrag vorhanden ist.

Überhaupt bei einer Transaktion die z.b. auf einmal 1 Millionen Einträge eintragen soll ist es übel, wenn er mittendrinnen abbricht, weil irgendwas schon vorhanden ist.

Nun muss ich wohl vor jedem Eintrag überprüfen ob der Eintrag vorhanden ist, oder nicht.

Danke für deine bemühung mir zu helfen :-)

lg Richi

Re: Postgresql mit psycopg2 - Fehlerbehandlung in SQL

Verfasst: Freitag 21. August 2009, 20:34
von gerold
PNS-Richi hat geschrieben:

Code: Alles auswählen

...
		sql = """DROP TABLE cat;
DROP TABLE blacklist;
DROP TABLE valid_time;
DROP TABLE whitelist_stat;"""

		self.c.execute(sql)...
Hallo Richi!

Nimm für so etwas nicht psycopg2, sondern bemühe das Kommandozeilenprogramm "psql" damit.
Wenn du es von Python aus aufrufen möchtest, dann kannst du "subprocess" dafür verwenden. Ich mache das auch so, wenn ich von Python aus eine Datenbank erstelle. Geringster Programmieraufwand -- sauberes Ergebnis!

mfg
Gerold
:-)