@zlodiak

Зачем существует rollback()?

Объясните пожалуйста зачем существует откат транзакции в виде 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() не понадобился. И не могу представить ситуацию, в которой он понадобился бы
  • Вопрос задан
  • 543 просмотра
Решения вопроса 1
@kalapanga
При этом обе операции откатятся
Это rollback и есть. Читайте документацию к используемым библиотекам!
rollback()
Roll back to the start of any pending transaction. Closing a connection without committing the changes first will cause an implicit rollback to be performed.
Changed in version 2.5: if the connection is used in a with statement, the method is automatically called if an exception is raised in the with block.
(The connection class)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Rollback нужен всегда по тому что нам, на самом деле, никто не может гарантировать что операция будет выполнена. То что вы все это делали и уверены что оно будет работать - так себе аргумент
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы