sqlalchemy, атомарность и вставляемый id

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

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

1 ответ

Решение

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

Другие вопросы по тегам