0
처리기에서 추가 작업을 취소하기 위해 특성 이벤트 ("추가")를 적용 할 수 있습니까?SqlAlchemy : 이벤트 처리기 동작 취소
내가 모든 추가 된 레코드에 대해 처리기에서 유효성을 검사하고 레코드가 유효성 검사를 통과하지 못한 경우 건너 뛰기를 원한다고 가정 해 봅시다.
처리기에서 추가 작업을 취소하기 위해 특성 이벤트 ("추가")를 적용 할 수 있습니까?SqlAlchemy : 이벤트 처리기 동작 취소
내가 모든 추가 된 레코드에 대해 처리기에서 유효성을 검사하고 레코드가 유효성 검사를 통과하지 못한 경우 건너 뛰기를 원한다고 가정 해 봅시다.
유효성 검사를 수행하는 또 다른 방법은 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)
감사합니다. – bozhidarc