SQL Alchemy откат двух транзакций - PullRequest
0 голосов
/ 02 ноября 2018

Я пишу скрипт на 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 против незафиксированных изменений (что кажется невозможным), либо откатывать ранее успешно совершенную транзакцию.

1 Ответ

0 голосов
/ 02 ноября 2018

Хорошо, я сделал это намного сложнее, чем нужно. То, что я искал, было, очевидно, session.flush, которое делает все вставки / обновления / удаления part_one без фиксации чего-либо.

def part_one():
    # does stuff
    session.flush()

def part_two():
    # does stuff, including querying part_one's results
    # sometimes this function fails and rollbacks
    session.commit()

Работает как шарм

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...