В чем разница между commit и flush в SQLAlchemy

Python Middle Без компании
В чем разница между commit и flush в SQLAlchemy
Ответы
`commit` и `flush` в SQLAlchemy выполняют разные функции, хотя оба связаны с отправкой изменений в БД. **flush()** синхронизирует сессию с БД, отправляя pending изменения (INSERT, UPDATE, DELETE), но не фиксирует транзакцию. Изменения видны в текущей транзакции, но могут быть откачены. Пример: ``` session.add(user) session.flush() # SQL отправлен, но транзакция не завершена ``` **commit()** фиксирует транзакцию, выполняя неявный flush, и делает изменения постоянными. После commit() новая транзакция начинается автоматически: ``` session.commit() # Изменения сохранены в БД ``` Ключевые отличия: - `flush` не завершает транзакцию, `commit` - завершает - После `flush` можно откатить изменения, после `commit` - нет - `commit` автоматически вызывает `flush`