Я пишу скрипт на Python для обработки некоторых данных CSV и помещаю их в базу данных sqlite, к которой я обращаюсь через sqlalchemy.
Расчеты в настоящее время осуществляются в два этапа. Вторая часть зависит от результатов первой части, уже существующей в базе данных. Переписывание сценария с нуля действительно разрешило бы эту зависимость, и я бы хотел этого избежать.
def part_one():
# does stuff
session.commit()
def part_two():
# does stuff, including querying part_one's results
# sometimes this function fails and rollbacks
session.commit()
Если part_two
не удается, я хочу выполнить откат part_two
И part_one
.
Поскольку part_two
зависит от данных, существующих в БД, я думаю, что я вынужден зафиксировать в part_one
. В противном случае я мог бы просто использовать тот же сеанс и выполнить откат, очевидно, полностью.
Я пытался возиться с session.begin_nested
, но ничего с этим не получилось. Есть ли способ достичь того, что я пытаюсь сделать? Мне нужно либо иметь возможность session.query
против незафиксированных изменений (что кажется невозможным), либо откатывать ранее успешно совершенную транзакцию.