Obecnie mam następującą metodę do wykonania wkładania/UPDATE/DELETE przy użyciu psycopg2
w Python
:Jak mogę uzyskać liczbę wierszy, których dotyczy problem, od psycopg2 connection.commit()?
def exec_statement(_cxn, _stmt):
try:
db_crsr = _cxn.cursor()
db_crsr.execute(_stmt)
_cxn.commit()
db_crsr.close()
return True
except:
return False
Ale to, co naprawdę chciałbym to zrobić, zamiast bool jest powrót wiersz Liczba dotkniętych transakcja lub -1, jeśli operacja się nie powiedzie.
Czy istnieje sposób na uzyskanie liczby wierszy, na które ma wpływ _cxn.commit()
? Na przykład. dla pojedynczego INSERT będzie zawsze 1, dla DELETE lub UPDATE, liczba wierszy, których dotyczy instrukcja itp.?
Podajesz uzasadnione powody, aby nie wychwytywać wyjątków, ale czy istnieje powód, że 'db_crsr.close()' nie znajduje się w bloku 'finally'? Po zakończeniu metody wykracza ono poza zakres. – jpmc26
@ jpmc26: Nie. To było z oryginalnego kodu OP i nie skupiałem się na tym aspekcie. W tym konkretnym przypadku prawdopodobnie zadeklarowałbym * kursor * w bloku 'with', aby automatycznie się zamknął. – khampson
Głupi mnie. Zapominanie 'z'. =) Potrzebuję więcej Pythona w moim życiu. – jpmc26