Объясните пожалуйста зачем существует откат транзакции в виде rollback()? Желательно в виде примера хотя бы на словах.
Например существует следующая трназакция:
import psycopg2
class DB_connection:
def __enter__(self):
self.connection = psycopg2.connect(
dbname='vendor',
user='vendor',
password='vendor',
host='localhost'
)
return self.connection
def __exit__(self, exc_type, exc_val, exc_tb):
if hasattr(self, 'connection'):
self.connection.close()
with DB_connection() as db_connect:
db_cursor = db_connect.cursor()
req = "insert into vendors(vendor_name) values('nvidia')"
db_cursor.execute(req)
req = "insert into parts(part_name) values(NULL)" # throw exception
db_cursor.execute(req)
db_connect.commit()
Здесь второй запрос будет не успешным потому что на уровне таблицы я запретил пустое значение в поле part_name. При этом обе операции откатятся потому что они находятся в пределах транзакции. Как я вижу, rollback() не понадобился. И не могу представить ситуацию, в которой он понадобился бы