созданного объекта: obj.method = new_method (ну через types), но при попытке подменить для системных объектов (в моем случае cursor oт postgreesql) - получаю что свойство только для чтения
есть ли какая нибудь магия переопределить методы в уже созданном системном объекте?
А зачем?
ну, например хочу, что бы по close вызывался commit в случае "все хорошо" или rollback по "не получилось"
Думаю можно просто отнаследоваться и переопределить поведение. Но задумка вредная - такие вещи нужно делать явно
ну я делаю явно with safe_transaction(connection) as safe_cursor... просто не хотелось 100 штук методов переопределять...
а просто сделать свой контекст def autocommitting_cursor(connection) в три строчки?
а можете пояснить? сейчас я просто создаю свой объект, в котором реализовал основные методы типа enter и прочие и в нем "перевызываю" нужное для курсора, свой котекст это как?
В виз берешь курсор. В пусть делаешь комиты
примерно так @contextlib.contextmanager def my_cursor(connection): cur = connection.cursor() try: yield cur except Exception: connection.rollback() raise else: connection.commit() finally: cur.close()
Обсуждают сегодня