sqlalchemy, атомарность и вставка идентификатора

В этой статье мне нужен был ответ о том, как получить идентификатор недавно вставленной записи базы данных: sqlalchemy flush() и получить вставленный идентификатор?

Меня интересует атомарность коммитов. Например, предположим, что я зафиксировал новый элемент в базе данных, а затем вернул идентификатор. Теперь я хочу выполнить дополнительную обработку и, возможно, добавить идентификатор элемента в качестве внешнего ключа в другую таблицу. Это нарушает атомарность, так как я хотел бы зафиксировать db только после того, как я выполнил эту дополнительную обработку. Разве это не похоже на проблему? Я столкнулся с этой проблемой в своем проекте.


person user442920    schedule 03.12.2015    source источник


Ответы (1)


.flush() ничего не фиксирует. Единственный эффект .flush() (и более позднего .rollback()) заключается в том, что AUTO_INCREMENT таблицы увеличивается (например, если последняя зафиксированная запись имела идентификатор 13, а затем вы .add(), .flush() и .rollback() ваша новая запись, следующая вставленная запись получит ID 15 вместо ID 14.

person Oliver Graeser    schedule 04.12.2015