2013-06-08 2 views
0

sqlalchemy 후크를 사용하여 일부 작업 (예 : 쿼리 또는 DB에 데이터 삽입)에 대한 사용자 권한을 확인합니다.Sqlalchemy 세션 - 커밋 할 ORM 인스턴스 목록

액세스 할 수없는 레코드를 방지하기 위해 세션 객체를 가져 오는 후크 before_commit을 설정했습니다. 모든 인스턴스를 가져오고 싶습니다.이 인스턴스는이 인스턴스가 저장 될 수 있는지 여부 (그리고 잘못된 레코드를 삭제할 수 있는지)를 확인하기 위해이 커밋에 의해 수행되어야합니다.

새 레코드를 추가하는 데는 after_attach 및 before_commit (after_attach 내부의 삭제는 어떤 이유로 작동하지 않음)에서 작동합니다. 그러나 인스턴스의 query-> update-> commit의 경우 after_attach가 호출되지 않았으므로 모든 권한 검사가 before_commit으로 이동되어야합니다.

답변

1

before_commit이 나올 때까지 모든 것이 세션의 관점에서 "저장"됩니다. 이는 변경 사항이 이 아닌 flush() 내에서 특별히 데이터베이스로 방출되기 때문입니다. 커밋은 flush()을 호출하지만 그 중 유일한 시간은 flush()이 아닙니다.

당신이 플러시에서 일어나는 일을 방지하려면

, 즉의 before_flush 이벤트를 사용 : http://docs.sqlalchemy.org/en/rel_0_8/orm/events.html?highlight=before_flush#sqlalchemy.orm.events.SessionEvents.before_flush

관련 문제