2013-06-08 4 views
0

Я использую перехваты sqlalchemy для проверки прав пользователей для некоторых операций (например, запросов или вставки данных в БД).Sqlalchemy Session - список экземпляров ORM для совершения

Чтобы предотвратить сохранение недоступных записей, я устанавливаю hook before_commit, который получает объект сеанса. Я хочу получить все экземпляры, которые должны выполняться этой фиксацией, чтобы проверить, могут ли эти экземпляры быть сохранены или нет (и исключить неправильные записи).

Для добавления новых записей он работает через after_attach и before_commit (исключение внутри after_attach по какой-то причине не работает). Но в случае запроса-> update-> commit экземпляров after_attach не вызывался, поэтому все проверки разрешений должны быть перенесены в before_commit.

ответ

1

к моменту выпуска before_commit, все «сохраняется» с точки зрения сессии; это связано с тем, что изменения испускаются в базу данных специально в пределах flush(), а не commit(). Конец просто вызывает flush(), но это не единственный раз, когда происходит flush().

Если вы хотите, чтобы предотвратить что-то происходило в румянцем, используйте before_flush событие для этого: http://docs.sqlalchemy.org/en/rel_0_8/orm/events.html?highlight=before_flush#sqlalchemy.orm.events.SessionEvents.before_flush

Смежные вопросы