2010-09-15 9 views
7

Używam tego polecenia w skrypcie Pythona:psycopg2.InternalError: w jaki sposób mogę uzyskać więcej przydatnych informacji?

try: 
    print sql_string 
    cursor.execute(sql_string) 
except: 
    print sys.exc_info() 

i uzyskiwanie:

(<class 'psycopg2.InternalError'>, InternalError('current transaction is aborted, commands ignored until end of transaction block\n',), <traceback object at 0x1010054d0>) 

Jednak gdybym spróbować sql_string z wiersza polecenia psql, to działa dobrze. Wiem, że skrypt łączy się z bazą danych w porządku, ponieważ mogę uruchamiać inne polecenia.

Jak mogę sprawić, że Python dostarczy mi bardziej przydatnych informacji o tym, dlaczego to polecenie zawodzi w skrypcie?

Odpowiedz

8

Spróbuj tego:

try: 
    print sql_string 
    cursor.execute(sql_string) 
except Exception, e: 
    print e.pgerror 

Jeśli nadal się „Bieżąca transakcja jest przerywana, poleceń ignorowane aż do końca bloku transakcji” to twój błąd jest dalej w swojej transakcji, a ta kwerenda zawodzi tylko ze względu na poprzednie niepowodzenie zapytania (i tym samym unieważnienie całej transakcji).

Szczegóły dotyczące pgerror można znaleźć w dokumentacji na http://initd.org/psycopg/docs/module.html#exceptions

4

Można również ogon wyjście PostgreSQL zobaczyć zapytania, który spowodował błąd:

$ tail -f /var/log/postgresql/postgresql.log 

Często jest to łatwiejsze niż edytowanie skrypt do debugowania go.

+0

Patrząc na log, od razu zauważyłem, że inna tabela nie została wstawiona, co spowodowało utworzenie bloku transakcji. Wkładka do stołu myślałam, że problem jest w porządku. – zerocog

Powiązane problemy