2012-06-29 3 views
0

처리기에서 추가 작업을 취소하기 위해 특성 이벤트 ("추가")를 적용 할 수 있습니까?SqlAlchemy : 이벤트 처리기 동작 취소

내가 모든 추가 된 레코드에 대해 처리기에서 유효성을 검사하고 레코드가 유효성 검사를 통과하지 못한 경우 건너 뛰기를 원한다고 가정 해 봅시다.

답변

1

유효성 검사를 수행하는 또 다른 방법은 sqlalchemy.orm.validates을 참조하십시오. 결과적으로 코드가 다소 깨끗합니다. 문서에 따르면

다음 (파이썬의 내장 ValueError를하고 AssertionError를 예외가 합리적인 선택이있는 곳) 계속에서 프로세스 을 중단 검증 예외를 발생하거나, 수정하거나하기 전에 값 을 대체 할 수있는 기능 진행. 그렇지 않으면 함수는 주어진 값을 반환해야합니다.

class User(...): 
    # ... 
    addresses = relationship("Address") 

    @validates('addresses') 
    def _modify_addresses(self, key, target): 
     if target.phone is None 
      raise ValueError("User addresses must have a phone number!") 
     return target 

는 문서에 따르면, 당신은 컬렉션에 추가 값을 수정할 수 있습니다. 하지만 완전히 추가하지 않으려면 Exception을 발생시켜야합니다. 분명히 외부 코드에서이 예외를 처리해야합니다.

def _add_addresses(user, address_list): 
    for address in address_list: 
     try: 
      user.addresses.append(address) 
     catch ValueError as _exc: 
      logging.warn("Could not add Address [%s] to the User [%s]", address, user.name) 
+0

감사합니다. – bozhidarc